不同資料庫的分頁技術

2021-06-19 12:41:02 字數 1185 閱讀 5649

針對不同的資料庫,分頁的實現方法是不一樣的。

oracle分頁技術

oracle資料庫為我們提供了兩個很重要的字段:rowid和rownumber。rowid是乙個絕對的值,是針對某一行分配的乙個唯一的行識別符號,根據它我們可以非常迅捷地定位到某乙個具體的行。它也起著主鍵的作用,即它是唯一的(unique)、必有的(mandatory)字段。rownumber是乙個相對的值,是指查詢結果的行號。例如standard標準題錄表中有三條題錄資訊,那麼每行對應的rownumber即為1、2、3。它是乙個從1開始標記的行數資訊。根據rownumber,我們就可以實現分頁技術了。

但是在實施的過程中,也遇到了乙個問題。最開始我認為這樣寫就可以了:

select * from thetable

where rownumber between ((頁碼-1) * 頁容量 + 1) and (頁碼 * 頁容量)

例如如果10條一頁,取第二頁的內容,那麼就是:select * from thetable where rownumber between (2-1)*10+1 and 2*10。但這是錯誤的,返回結果會是乙個空集合。對rownumber實施where條件查詢是有限制的,只能求前多少多少行,即where rownumber

sqlserver分頁技術

sqlserver的分頁方法和oracle不盡相同。sqlserver並沒有提供oracle特有的rowid和rownumber兩個字段,而是使用了top這個關鍵字:select top 10 * from thetable或是select top (10) * from thetable。sqlserver2000使用前者不加括號的書寫方法,sqlserver2005開始支援括號,增加可讀性。通過top關鍵字,可以限制查詢只取得結果集的前多少行。這個等價於oracle的where rownumber(

select max (id) from(

select top ((頁碼-1)*頁容量) id from table1 order by id))

order by id

mysql分頁技術

mysql資料庫的分頁技術實現起來要比前兩種資料庫簡單一些。由於加入了關鍵字limit,分頁在mysql下面顯得非常簡單。語句如下:

select * from thetable limit (頁碼-1)*頁容量 , 頁碼*頁容量

limit關鍵字是個index,即起始值從0開始。

不同資料庫分頁

oracle分頁 分頁的宗旨是控制查詢出來的資料個數,下面這條語句對於oracle分頁已經足夠了。注 該語句只能用於oracle select from select aa.rownum rn from select from users order by id desc aa where rown...

資料庫分頁技術

1 無order by排序的寫法。效率最高 經過測試,此方法成本最低,只巢狀一層,速度最快!即使查詢的資料量再大,也幾乎不受影響,速度依然!select from select rownum as rowno,t.from k task t where flight date between to ...

不同資料庫的分頁實現

oracle 1 偽列 rownum select from select t.rownum rn from t user t where rownum page.getcurrentpage 1 page.getpagesize 2 物理列 rowid select from t user t w...