为什么基于价钱的优化器做犯错误选择

  本源:网海拾贝





基于价钱的优化器(CBO)在举办全表扫描时偶然会作出一些错误的选择,这种景象尤其发生在Oracle7和Oracle8之中。有几种景象会招致这个标题问题,别离如下所示:

最高使用标识表记标帜(High water mark)太高 :当要在一个表中举办大批的删除时,最高使用标识表记标帜能够会远远高于实际用到的数据块(block)数量。因而,假若依赖于最高使用标识表记标帜,CBO屡屡会错误的挪用全表扫描。

错误的优化形式: 假若OPTIMIZER_MODE被设置为ALL_ROWS梗概CHOOSE,那么SQL优化器会更乐于使用全表扫描。假若想举办快速的OLTP优化,必须起首确认曾经将OPTIMIZER_MODE设置成FIRST_ROWS。

缺少的统计: 假若表曾经清楚的添加,而且没有被重新剖析以更新统计数据,那么大概会错误的举办全表扫描,因为CBO认为表长还是像未添加之前那么小。

偏斜的索引 :假若一个盘诘中的候选索引存在偏斜值,那么CBO大概会错误的选择全表扫描。比喻,考虑一个查找全盘自满前提REGION=SOUTHERN的纪录的盘诘。在Region栏中曾经有了一个索引,可是只需1%的条款是Southern region的。在缺少列的柱状图的景象下,CBO不晓得Southern region有更高的命中率,以是它会选择全表扫描。




版权声明: 原创作品,容许转载,转载时请务必以超链接方式标明文章 原始理由 、作者信息和本声明。不然将追究法律责任。

posted @ 2011-03-07 20:06  蓝色的天空III  阅读(144)  评论(0编辑  收藏  举报