一.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...