輕鬆實現各資料庫的分頁查詢

2021-07-05 19:52:16 字數 2271 閱讀 3109

一、 mysql 資料庫分頁查詢

mysql資料庫實現分頁比較簡單,提供了limit函式。一般只需要直接寫到sql語句後面就行了。

limit子句可以用來限制由select語句返回過來的資料數量,它有乙個或兩個引數,如果給出兩個引數, 第乙個引數指定返回的第一行在所有資料中的位置,從0開始(注意不是1),第二個引數指定最多返回行數。例如:

select * from table where … limit 10; #返回前10行

select * from table where … limit 0,10; #返回前10行

select * from table where … limit 10,20; #返回第10-20行資料

二、 sqlserver資料庫分頁查詢

sqlserver資料庫又分為sqlserver2000和sqlserver2005。一般比較簡單的方法是通過top函式來實現。如下:

select top 10 * from sql where (

code not in (select top 20 code from testtable order by id))

order by id

以上語句的有乙個致命的缺點,就是它含有not in字樣,要換成用not exists來代替not in,二者的執行效率實際上是沒有區別的。

在以上分頁演算法中,影響我們查詢速度的關鍵因素有兩點:top和not in。top可以提高我們的查詢速度,而not in會減慢我們的查詢速度,所以要提高我們整個分頁演算法的速度,就要徹底改造not in,同其他方法來替代它。

我們知道,幾乎任何字段,我們都可以通過max(字段)或min(字段)來提取某個欄位中的最大或最小值,所以如果這個欄位不重複,那麼就可以利用這些不重複的字段的max或min作為分水嶺,使其成為分頁演算法中分開每頁的參照物。在這裡,我們可以用操作符「>」或「<」號來完成這個使命。如:

select top 10 * from table1 where id>200

於是就有了如下分頁方案:

select top 頁大小 *

from table1

where id>

(select max (id) from

(select top ((頁碼-1)*頁大小) id from table1 order by id) as t

) order by id

這種方法執行多少始終沒有大的降勢,後勁仍然很足。尤其對於資料量大的時候,該方法執行速度一點也不會降低。

使用top要求主鍵必須唯一,不能是聯合主鍵。如果是聯合主鍵,則查詢出的結果會亂序的。

目前sqlserver2005提供了乙個row_number()函式。row_number() 就是生成乙個順序的行號,而他生成順序的標準,就是後面緊跟的over(order by reportid),其中reportid可以是聯合主鍵。下面,我們看看怎麼具體應用這個rowno進行分頁.

select top 10 * from

( select top 10 row_number() over (order by reportid) as rowno

from table

) as a

where rowno > " + pageindex*10

pageindex就是我們需要資料的頁數.

但對於sqlserver2000的話,如果是聯合主鍵,我還沒有解決辦法,如果大家有可跟我聯絡。謝謝大家了。

三、 orcale資料庫分頁查詢

orcale資料庫實現分頁查詢可以使用row_number()函式或者使用rownum 虛列兩種方法。

第一種:利用分析函式row_number() 方法

select * from(

select t.*,row_number() over (order by t1.id) rowno from table1

) where rowno between 21 and 40;

第二種:直接使用rownum 虛列

select * from

(select t.*,rownum as rowno from table1 )

where rowno between 10 and 20

這兩種方法比較,顯然第二種方法比較好。因為不用order by語句,會提高檢索資料的速度的,尤其資料量越大時,第二種方法快速檢索資料越明顯。

最後提醒大家:oracle中慎用帶有order by的分頁。尤其是在oracle10g中,會出現會引起混亂,即相同記錄會出現在不同頁中。

各資料庫分頁查詢語句

1.oracle資料庫分頁 select from select a.rownum rc from 表名 where rownum endrow a where a.rc startrow rc 別名,endrow 最大多少行,startrow 最小 如果要取20 30行之間,只需要小於30,大於2...

各資料庫高效率分頁

db2 1.建立索引 create index 索引名 on 表名 排序用的列名 asc 2.更新統計資訊 runstats on table 模式名.表名 with distribution and on all columns and detailed index 模式名.索引 3.優化sql ...

資料庫實現分頁查詢顯示

現在一般用的比較多的資料庫,應該是oracle,mssql t sql mysql,但是他們並沒有統一的標準來實現分頁查詢,也就是沒有統一的sql標準,所以他們三個方法各不同給編碼人員造成了很大的不便。先總結一下,與大家共享!mysql 是最簡單的,就是使用limit進行查詢。例如 select f...