在oracle12c以上出現fetch命令進行分頁查詢問題
sql> select * from
2 (
3 select a.*, rownum rn
4 from (select * from tab_test_1) a
5 )
6 where rn between 21 and 40;
sql分析:select * from table (目標表是:tab_test_1)這個條件存在查詢的第三層,orcale無法將第三層的查詢條件推到最內層,所以最內層和中間層返回的資料都是所有滿足條件的資料,資料過濾在外層才完成,效率明顯較低。
第二條分頁查詢sql如下(產生右邊的執行計畫):
sql> select * from
2 (
3 select a.*, rownum rn
4 from (select * from tab_test_1) a
5 where rownum <= 40
6 )
7 where rn >= 21;
sql分析:select * from table(目標表是:tab_test_1)表示不進行分頁的原始語句, rownum >= 21 控制分頁查詢的每頁範圍。orcale可以將外層查詢條件推到內層查詢中,提高查詢效率;所以 rownum <= 40 可以被推到內層查詢中,一旦oracle查詢結果超過 rownum 限制條件,查詢結果就終止,所以此分頁查詢格式效率較高。
---------------------
原文:
優化分頁查詢
我們一般使用分頁都是使用limit來完成的,如果資料量小的話還可以,但是當資料量非常大的時候,不建立索引,通過全表查詢,將會非常耗時,效能將受到很大的影響。第一種優化方式 在索引上完成排序分頁的操作,最後根據主鍵關聯回原表查詢所需要的其他列內容 例 我想對我之前的分頁進行優化,沒有優化前的sql語句...
mysql優化 優化分頁查詢
create table goods id bigint 20 unsigned not null auto increment,name varchar 10 default null,price double default null,create time datetime default n...
資料庫 分頁查詢優化
select top10 from admin where adminid notin select top1500000 adminid from admin 使用not in會引發全表掃瞄 理論上會,由於資料庫會對查詢進行優化,所以實際我並不知道會不會 其用時如下 cpu 時間 562 毫秒,占...