一般資料分頁方式有:
1.1、客戶端(應用程式或瀏覽器)分頁
優點:編碼簡單,減少客戶端與應用伺服器網路互動次數
缺點:首次互動時間長,占用客戶端記憶體
適應場景:客戶端與應用伺服器網路延時較大,但要求後續操作流暢,如手機gprs,超遠端訪問(跨國)等等。
1.2、應用伺服器分頁
list list=executequery(「select *from employee order by id」);int count=list.size();
list sublist= list.sublist(10, 20);
優點:編碼簡單,只需要一次sql互動,總資料與分頁資料差不多時效能較好。
缺點:總資料量較多時效能較差。
適應場景:資料庫系統不支援分頁處理,資料量較小並且可控。
1.3、資料庫sql分頁
採用資料庫sql分頁需要兩次sql完成,
乙個sql計算總數量,乙個sql返回分頁後的資料
優點:效能好
缺點:編碼複雜,各種資料庫語法不同,需要兩次sql互動。
oracle資料庫一般採用rownum來進行分頁,常用分頁語法有如下兩種:
1. 直接通過rownum分頁:
select*from
(
select a.*,rownum rn from
(select
*from product a where company_id=? order
bystatus) a
where rownum<=20)
where rn>
10;
資料訪問開銷=索引io+索引全部記錄結果對應的表資料io。
2. 採用rowid分頁語法
優化原理是通過純索引找出分頁記錄的rowid,再通過rowid回表返回資料,要求內層查詢和排序欄位全在索引裡。
createindex myindex on
product(company_id,status);
select b.*
from
(
select
*from
(
select a.*,rownum rn from
(select rowid rid,status from product a where company_id=? order
bystatus) 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個io(50+20/2);
通過去除不必要的返回字段可以提高效能,例:
調整前:select * from product where company_id=?;
調整後:select id,name from product where company_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表。
資料庫訪問優化法則詳解之返回更少的資料
資料庫訪問優化法則詳解之返回更少的資料 返回更少的資料 如果返回的資料更少,則可以減少網路傳輸或磁碟訪問。可通過分頁處理等方式減少返回資料。資料分頁處理 常用資料分頁方式有以下3 種。1 客戶端 應用程式或瀏覽器 分頁 優點 編碼簡單,減少客戶端與應用伺服器網路的互動次數。缺點 首次互動時間長,占用...
優化頁面訪問速度(二) 資料庫優化
一 概述 資料庫優化,主要包括資料表設計 索引 sql語句 表拆分 資料庫伺服器架構等方向的優化。二 資料庫設計 在建表的時候,就需要考慮到將來的使用場景,盡量在建表初期就設計好。1 儲存引擎 mysql常被提到的儲存引擎就是innodb和mysiam,其實現在主要都在用innodb了。兩者的區別 ...
資料庫訪問優化法則
從圖上可以看到基本上每種裝置都有兩個指標 延時 響應時間 表示硬體的突發處理能力 頻寬 吞吐量 代表硬體持續處理能力。從上圖可以看出,計算機系統硬體效能從高到代依次為 cpu cache l1 l2 l3 記憶體 ssd硬碟 網路 硬碟 根據資料庫知識,我們可以列出每種硬體主要的工作內容 cpu及記...