Oracle Rownum分页改写

---说明:案例来自《收获,不止SQL优化》

创建测试数据:

---drop table test_rownum purge;

SQL>createtabletest_rownum asselect*fromdba_objects;

SQL>selectcount(*)fromtest_rownum;---75793

SQL>altersessionsetstatistics_level=all;

SQL>setlinesize 1000

SQL>setpagesize 500

分页写法1:

SQL>select*from(selectt.*,rownumasrn fromtest_rownum t)a wherea.rn>=1anda.rn<=10;

查看执行计划:

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

分页写法2:

SQL>select*from(selectt.*,rownumasrn fromtest_rownum t whererownum<=10)a wherea.rn>=1;

查看执行计划:

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

总结:写法1的buffer为1080,扫描真实数据为75793条,写法2的buffer只有5,扫描真实数据为10条,性能较写法1有很大改善。

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!