資料庫訪問優化法則詳解之返回更少的資料

2021-06-01 05:44:29 字數 2401 閱讀 2795

資料庫訪問優化法則詳解之返回更少的資料

返回更少的資料

如果返回的資料更少,則可以減少網路傳輸或磁碟訪問。可通過分頁處理等方式減少返回資料。

資料分頁處理

常用資料分頁方式有以下3 種。

1.客戶端(應用程式或瀏覽器)分頁

優點:編碼簡單,減少客戶端與應用伺服器網路的互動次數。

缺點:首次互動時間長,占用客戶端記憶體。

適應場景:客戶端與伺服器網路延時較大,但要求後續操作流暢,如手機gprs 應用、超遠端訪問(跨國)等等。

2.應用伺服器分頁

list list=executequery("select * fromemployee order by id");

int count= list.size();

list sublist= list.sublist(10, 20);

優點:編碼簡單,只需要一次sql 互動,總資料與分頁資料差不多時效能較好。

缺點:總資料量較多時效能較差。

適應場景:資料庫系統不支援分頁處理,資料量較小並且可控。

3.資料庫sql 分頁

採用資料庫sql 分頁需要兩次sql 完成:

乙個sql 計算總數量。

乙個sql 返回分頁後的資料。

優點:效能好。

缺點:編碼複雜,各種資料庫語法不同,需要兩次sql 互動。

oracle 資料庫一般採用rownum 來進行分頁,常用分頁語法有如下兩種:

直接通過rownum 分頁

select * from (

select a.*,rownum rn from

(select * from product a where company_id=?order by status) a

where rownum<=20)

where rn>10;

資料訪問開銷=索引io+索引全部記錄結果對應的表資料io

採用rowid 分頁語法

優化原理是通過純索引找出分頁記錄的rowid,再通過rowid 回表返回資料,要求內層查詢和排序欄位全在索引裡。

create index myindex onproduct(company_id,status);

select b.* from (

select * from (

select a.*,rownum rn from

(select rowid rid,status from product awhere company_id=? order by status) a

where rownum<=20)

where rn>10) a, product b

where a.rid=b.rowid;

資料訪問開銷=索引io+索引分頁結果對應的表資料io

例項:乙個公司產品有1000 條記錄,要分頁取其中20 個產品,假設訪問公司索引需要50個io,2 條記錄需要1 個表資料io。

那麼按第一種rownum 分頁寫法,需要550(50+1000/2)個io;按第二種rowid分頁寫法,只需要60(50+20/2)個io。

只返回需要的字段

通過去除不必要的返回字段可以提高效能,如下所示。

調整前:

select * from product where company_id=?;

調整後:

select id,name from product wherecompany_id=?;

優點:(1)減少資料在網路上的傳輸開銷。

(2)減少伺服器資料處理開銷。

(3)減少客戶端的記憶體占用。

(4)字段變更時提前發現問題,減少程式的bug。

(5)如果訪問的所有字段剛好在乙個索引裡面,則可以使用純索引訪問提高效能。

缺點:增加編碼工作量。

由於會增加一些編碼工作量,所以一般需要通過開發規範來要求程式設計師這麼做,否則等專案上線後再整改,工作量會更大。

如果你的查詢表中有大字段或內容較多的字段,如備註資訊、檔案內容等等,那在查詢表時一定要注意這方面的問題,否則可能會帶來嚴重的效能問題。如果表經常要查詢並且請求大內容欄位的概率很低,我們可以採用分表處理,將乙個大表分拆成兩個一對一的關係表,將不常用的大內容字段放在一張單獨的表中。如一張儲存上傳檔案的表:

t_file(id,file_name,file_size,file_type,file_content)

我們可以分拆成兩張一對一的關係表:

t_file(id,file_name,file_size,file_type)

t_filecontent(id, file_content)

通過這種分拆,可以大大減少t_file表的單條記錄及總大小,這樣在查詢t_file時效能會更好,當需要查詢file_content 字段內容時再訪問t_filecontent 表。

本書詳細資訊:

資料庫訪問優化法則

從圖上可以看到基本上每種裝置都有兩個指標 延時 響應時間 表示硬體的突發處理能力 頻寬 吞吐量 代表硬體持續處理能力。從上圖可以看出,計算機系統硬體效能從高到代依次為 cpu cache l1 l2 l3 記憶體 ssd硬碟 網路 硬碟 根據資料庫知識,我們可以列出每種硬體主要的工作內容 cpu及記...

訪問資料庫優化法則

減少資料訪問 減少磁碟訪問 建立並正確使用索引 只通過索引訪問資料 優化sql執行計畫 返回更少的資料 減少網路傳輸 資料分頁處理 a 應用程式分頁 客戶端或瀏覽器 a 應用伺服器分頁 客戶端或瀏覽器 a 資料庫sql分頁 客戶端或瀏覽器 只返回需要的字段 減少互動次數 減少網路傳輸 使用儲存過程 ...

資料庫訪問優化法則

要正確的優化 sql 我們需要快速定位能性的瓶頸點,也就是說快速找到我們 sql 硬碟是每分鐘 7200 轉等等。因此,為了快速找到 sql 的效能瓶頸點,我們也需要了解我們計算機系統的硬體基本效能指標,下圖展示的當前主流計算機效能指標資料。從圖上可以看到基本上每種裝置都有兩個指標 延時 響應時間 ...