基于CBO的执行计划简介
基于CBO的执行计划简介
一、生成执行计划的几种方式
1、explain plan for sql语句; select * from table(dbms_xplan.display); 2、sqlplus中set autotrace on; 3、toad中Ctrl+E pl/sqldeveloper中F5
二、SQL优化实质上指的是分析执行计划,确定SQL性能问题的位置
如果生产环境中遇到CBO执行计划选择错误的情况,首选应该考虑的是我们是否有什么地方做的有失误,例如:表的分析不是最新的,是否对相关的列做了直方图,是否对分区表做了全局区或者分局区分析等,而不是盲目的使用Hint来构造SQL语句。
当我们发现某条SQl语句执行效率很低时:1、查看当前SQL语句的执行计划
2、通过Hint改变该SQL的执行计划
3、比较两种执行计划的效率高低
4、如果当前的执行计划效率不是最高的,那么就要考虑CBO为什么选择了错误的执行计划
5、更改相关的SQL语句
执行计划中谓词部分:1、如果显示的是ACCESS,就表示这个谓词条件的值将会影响到数据的访问路径。
2、如果显示的是FILTER,就表示谓词条件不会影响到数据的访问路径,只是起到过滤数据的作用。
执行计划中提示部分:1、如果表没有做分析,那么CBO可以通过动态采样的方式来分析数据,从而获得正确的执行计划。
2、如果表没有做分析,动态采样的数据块不够多的话,也可能导致分析数据失真,从而导致错误的执行计划。
3、如果表分析过,但是分析的信息过旧,这时候CBO不会再使用动态采样,而是直接使用这些旧的数据,从而可能导致错误的执行计划。