如何在SqlServer與oracel中進行分頁的討論!

來源:互聯網
上載者:User
server|sqlserver|分頁
使用sql,和oracle資料庫進行分頁可以有以下三種方法!



下面讓我們看一看如果我們要在資料庫中取第1000條到第1010條的資料這兩種方法是怎麼實現的.




 


1.        使用暫存資料表的方法. (在系統中主要是直接寫Sql語句來做)



a)          按所需的排序方式排好序



b)         建立暫存資料表



c)          從資料庫裡取出第0條 到 第1010條的資料



d)         把這些資料放入暫存資料表中



e)          把暫存資料表再按與 a) 相反的排序方式排好序



f)          然後只需把暫存資料表中的前10條顯時出來



g)          銷毀暫存資料表




 


2.        使用 object 的方法



a)          按所需的排序方式排好序



b)         從資料庫裡取出第0條 到 第1010條的資料



c)          倒著從這1010條資料中取10條 放入一個 object中



d)         把這個 object裡的記錄 完全倒置一下



e)          把 object裡的資料顯示出來




 


顯然 第二種 方法優於第一種方法 它減少了系統建立, 銷毀暫存資料表所需耗費的資源, 但是它們都有一個共同的弱點. 那就是 它們都要從資料庫裡取出第0條 到 第1010條的資料  這樣就造成了 查詢出的記錄數很少,但網路傳輸資料量很大!




 


因此比較好的分頁做法應該是:



每次翻頁的時候只從資料庫裡檢索頁面大小的塊區的資料。這樣雖然每次翻頁都需要查詢資料庫,但查詢出的記錄數很少,網路傳輸資料量不大,如果使用串連池更可以略過最耗時的建立資料庫連接過程。而在資料庫端有各種成熟的最佳化技術用於提高查詢速度,比在應用伺服器層做緩衝有效多了。




 


對於SqlServer 資料庫 如要到得第1000-1010條記錄:




 


Select top 10  * from (



Select top 10  * from (



     Select top 1010 * from docdetail order by lastmodidate asc ,Id asc



) temptbl1 order by lastmodidate desc ,Id desc



) temptbl2 order by lastmodidate asc,Id asc




 



 

 



 


對於oracle 資料庫 如要到得第1000-1010條記錄 由於oracle中的rownum是在查詢之後排序之前賦值的.所以其相應的寫法應為:




 


 select * from (



         select my_table.*, rownum as temptbl_rownum from (



                   Select * from docdetail order by lastmodidate asc,Id asc



      ) temptbl where rownum <1010



 ) where  temptbl_rownum >=1000




 






當以上的Sql語句執行完成以後, 網路傳輸資料量就從以前的1010條減少到 10條




 


通過以上分頁方式的改變,對我們系統的效能有很大的提升



我有個客戶使用的是oracel資料庫 其中文檔數目為 12萬條 ,當我們對這張表時行搜尋的時候 使用第一種方法進行分頁時,頁面顯示的時間約為10秒左右,而使用第三種方法而現在頁面顯示時間只需要2-3秒左右.




 


當然,可能還有更好的分頁方法,總覺得隨著資料庫裡的資料的不斷增加,系統啟動並執行速度將會變慢,我在這裡貼出這篇文章,只是想和大家討論一下,還有沒有更好的方法, 希望大家不吝回複! 一起討論!



:D (完)



 


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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