Oracle Rownum分頁改寫

chenoracle發表於2020-05-24

Oracle Rownum分頁改寫

---說明:案例來自《   收穫,不止SQL最佳化》

建立測試資料:

---drop table test_rownum purge;

SQL >   create   table  test_rownum as   select   *   from  dba_objects ;

SQL >   select   count (*)   from  test_rownum ;   ---75793

SQL >   alter   session   set  statistics_level = all   ;

SQL >   set  linesize 1000

SQL >   set  pagesize 500

分頁寫法 1

SQL >   select   *   from   ( select  t. *, rownum   as  rn   from  test_rownum t )  a where  a.rn >= 1   and  a.rn <= 10 ;

檢視執行計劃:

SQL >   select   *   from   table ( dbms_xplan.display_cursor ( null , null , 'allstats last' ));

分頁寫法 2

SQL >   select   *   from   ( select  t. *, rownum   as  rn   from  test_rownum t where   rownum <= 10 )  a where  a.rn >= 1 ;   

檢視執行計劃:

SQL >   select   *   from   table ( dbms_xplan.display_cursor ( null , null , 'allstats last' ));

總結: 寫法1的buffer為1080,掃描真實資料為75793條,寫法2的buffer只有5,掃描真實資料為10條,效能較寫法1有很大改善。

歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2693986/,如需轉載,請註明出處,否則將追究法律責任。

相關文章