年轻就要醒着拼
“
我不怕死 只是不想这么活
而你,还想那么活吗?
你不怕失望,只是不想绝无希望
你不怕压力,只是不想无聊到死
你不怕创意,只是不想毫无新意
......
事业的穹顶之下
你是否该换种活法?
”
目标:计算SQL执行每一步的资源消耗
1、查看每一步的执行计划(DBMS_XPLAN.DISPLAY)
测试工具:PL/SQL
举例
explain plan for select a.polno from lcpol a, lcinsured b where (a.insuredappage < 16 or a.insuredappage > 70) and a.grpcontno = '123213213213' and a.grpcontno = b.grpcontno and b.insutype <> '1' and a.riskcode = '6811' ; --任意查询语句select * from table(dbms_xplan.display);
执行结果:(红框重点讲解)
回表
table access by index rowId 索引返回多少行数据,回表就要回多少次,每次回表都是单独(因为RowID对应一个数据块)
笛卡尔积
merge join cartesian 表
之间的自然连接等,进行笛卡尔积计算,非常影响效率,尽量多的减少数据条数。
加载到内存
buffer sort 不是一种排序,而是一种临时表的创建方式.
重点:就是在内存中存放一张临时表。sort 用来修饰buffer,表示具体在内存中某个地方存放临时表,在PGA的SQL工作区里的排序区。
2、set autotrace查看执行计划
测试工具:Oracle客户端
举例
1:set autotrace on;显示:记录集+explain+statistics2:set autotrace on explain显示:记录集+explain3:set autotrace on statistic显示 :记录集+statistics4:set autotrace traceonly显示:expain+statistics(不显示数据)5:set autotrace traceonly statistics显示:statistics6:set autotrace traceonly explain显示:explain7:set autotrace offhttps://blog.csdn.net/kuyushow/article/details/78805174
2、查看每一步的执行计划 (DBMS_XPLAN.DISPLAY_AWR/CURSOR)
--执行一个SQLselect contno from lccont where rownum = '1';--获取这个SQL的sql_id和 child_numberSELECT sql_id, child_number FROM v$sql WHERE sql_text LIKE 'select contno from lccont where rownum = ''1'' ';--根据sql_id就可以显示刚才那个SQL的执行计划SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('9qgvu3ku0x9ac',0));
结果:
——
⊙
完
⊙
——
点击“阅读原文”了解更多内容