SQL分頁查詢

2021-09-29 12:28:03 字數 2095 閱讀 6555

一.oracle分頁查詢

1.方式一(效率比方式二高):

select *

from (select a., rownum rn

from (select * from table_name) a

where rownum <= 10)

where rn >= 1;

select * from table_name表示不進行翻頁的原始查詢語句。rownum <= 10和rn >= 1控制分頁查詢的每頁的範圍。

2.方式二:

select *

from (select a., rownum rn from (select * from table_name) a)

where rn between 0 and 10;

這種方式是去掉查詢第二層的where rownum <= 10語句,在查詢的最外層控制分頁的最小值和最大值。

二.mysql分頁查詢

select … from … where … order by … limit …

在中小資料量的情況下,這樣的sql足夠用了,唯一需要注意的問題就是確保使用了索引。

舉例來說,如果實際sql類似下面語句,那麼在 category_id, id兩列上建立復合索引比較好:

select * from articles where category_id = 123 order by id limit 50, 10 ;

隨著資料量的增加,頁數會越來越多,檢視後幾頁的sql就可能類似下面這種:

select * from articles where category_id = 123 order by id limit 10000, 10;

可以看出,越往後分頁,limit 語句的偏移量就會越大,速度也會明顯變慢。此時,我們可以通過子查詢的方式來提高分頁效率:

select * from articles where id >=

(select id from articles where category_id = 123 order by id limit 10000, 1)

and category_id = 123 order by id limit 10;

還可以通過 join 方式來實現分頁查詢:

select * from articles as t1

join (select id from articles where category_id = 123 order by id limit 10000, 1) as t2

where t1.id >= t2.id and t1.category_id = 123 order by t1.id limit 10;

為什麼會這樣呢?因為子查詢是在索引上完成的,而普通的查詢時在資料檔案上完成的,通常來說,索引檔案要比資料檔案小得多,所以操作起來也會更有效率。

實際可以利用類似策略模式的方式去處理分頁,比如判斷如果是一百頁以內,就使用最基本的分頁方式,大於一百頁,則使用子查詢的分頁方式。

下面是實際中三種方式的使用:

複製**

select * from commodityinfo where commodityid=『zmcomd342161018143038124』 order by id limit 0,2;

select * from commodityinfo where id >=

(select id from commodityinfo where commodityid=『zmcomd342161018143038124』 order by id limit 0, 1)

and commodityid=『zmcomd342161018143038124』 order by id limit 2;

select * from commodityinfo as t1

join (select id from commodityinfo where commodityid = 『zmcomd342161018143038124』 order by id limit 0, 1) as t2

where t1.id >= t2.id and t1.commodityid=『zmcomd342161018143038124』 order by t1.id limit 2;

SQL分頁查詢

分頁sql查詢在程式設計的應用很多,主要有儲存過程分頁和sql分頁兩種,我比較喜歡用sql分頁,主要是很方便。為了提高查詢效率,應在排序欄位上加索引。sql分頁查詢的原理很簡單,比如你要查100條資料中的30 40條,你先查詢出前40條,再把這30條倒序,再查出這倒序後的前十條,最後把這十條倒序就是...

sql分頁查詢

declare id int declare moverecords int declare currentpage int declare pagesize int set currentpage 300 set pagesize 100 currentpage和 pagesize是傳入引數 se...

SQL分頁查詢

關於sql語句分頁,網上也有很多啦,我貼一部分過來,並且總結自己已知的分頁到下面,方便日後查閱。方法1 適用於 sql server 2000 2005 1 select top 頁大小 2from table1 3where id not in4 5select top 頁大小 頁數 1 id f...