標籤:des style blog http io os 使用 ar for
2014-09-26 08:53:42
【文章出處:http://www.cnblogs.com/wlandwl/archive/2014/09/25/bigpage.html】
在sql sever中大資料的分頁一直是難以處理的一塊,利用id自增列分頁也存在不足之處。從一個相對全面的分頁看,sql sever2005中新增的row_number()函數解決了這個問題。還是從一個實際項目開始介紹吧。中國鐵建股份公司的項目表中資料很大,開發之初用的是GridView控制項內建的分頁,在運行一年以後,點擊下一頁終於是難以等待了,系統需要最佳化。對於分頁的改進是業務的需要。於是,我採用了Row_number()函數分頁。也算一解了燃眉之急。
說明:該篇文章只是一個案例的說明,更詳細的理論請查看隨筆《大資料分頁實現與效能最佳化》
提高分頁效率主要有:
(1)充分利用外鍵,以提高表連線速度
(2)儘可能使用自然連結,盡量避免使用外串連
(3)儘可能將記錄少的表放在串連的左邊,以減少先處理的記錄數
(4)儘可能先選擇,後串連,以減少處理的資料量
(5)有可能的時候建立視圖,充分使用資料庫自身的最佳化功能
以下為分頁查詢的sql語句:
select * from
(select t_gcxm_test.sgdw,t_gcxm_test.id,xmmc,t_gcxm_test.gclb as gclb,gchte,gchte - kl2 as xmsyjzl,
kl2 as klsl,dwmc,lry ,Row_number() over(order by t_gcxm_test.id desc) as IDRank
from t_dw,t_gcxm_test where t_dw.dwid=t_gcxm_test.sgdw and (sgdw like‘gf12%‘ and ((sgdw <>‘gf12‘ and fgcid is null)or(sgdw =‘gf12‘ )) or lry = ‘gf12gao‘))
as b
where IDRank>=50023 and IDRank<50033
其中的IDRank的值可通過web網頁,傳遞過來。把分頁的sql語句寫在預存程序中,可以充分展現分頁的效果。
圖一 單表分頁耗時
圖二 多表分頁耗時
SqlSever大資料分頁【轉】