SqlSever大資料分頁【轉】

來源:互聯網
上載者:User

標籤: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大資料分頁【轉】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.