首页 > Oracle > 一个真实的基数导致CBO选错执行计划!
2014
02-26

一个真实的基数导致CBO选错执行计划!

有很多情况,导致CBO选错执行计划,良好的统计信息在优化当中还是非常有必要的。在其他文章当中简单说过Oracle表之间的连接方式。如果一个表的基数算错,很可能就会走错执行计划。

从执行计划可以看出来。id=4这一步最先执行,全表扫描估算返回2967条数据,然后id=4会和id=5进行嵌套连接,那id=5这一步会被扫描2967次,且id=4这一步有filter过滤,这个执行计划看起来没什么问题,但是在执行的时候会话费比较长的时间。看到执行计划,先从内开始找起,找到id=4这一步,通过过滤条件到表中查询数据,看实际返回的条数

可以从实际环境中看到。实际id=4这一步要返回946432条数据,和CBO估算返回相差太大。基数估算错误,这里不应该嵌套循环,应该走hash join,如果走了嵌套循环,那id=5这一步就要扫描946432次。一般基数估算不准,可以通过查看统计信息是否过期来解决。

最后编辑:
作者:Jerry
一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL