暂无图片
请问,我在某张表上建了一个索引,可是执行计划并没有走这个索引,这是为什么?
我来答
分享
1℃
2020-03-07
请问,我在某张表上建了一个索引,可是执行计划并没有走这个索引,这是为什么?
暂无图片 5M

15835944061.jpg

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
王小那个鑫

执行计划是否选择走索引是和数据表的统计信息、数据分布、条件列的选择率有关。CBO会从可能的执行计划中选择出cost最低的执行计划来执行SQL。所以,您的这个情况可能是:
1.统计信息不准确;
2.条件分布不均匀,条件列的可选择度低(比如,满足的这个条件为数据中的大部分);
此时,CBO认为走全表扫描的成本要比走索引更小,效率会更高,此时就会选择走全表。

您可以通过加index的hint强制走该索引,然后看看cost值和走全表的cost那个小,就会比较明朗了。

如果想更深入的了解原因,也可以通过10053事件来对这个SQL进行分析。

暂无图片 评论
暂无图片 有用 0
外包DBA

这个是解释计划,用display cursor看下,里面有访问路径,发出来看下,有可能是发生隐士类型转换了

暂无图片 评论
暂无图片 有用 0
刘峰

最直观的计算方法,查一下where后面的两个过滤条件返回的结果集N1,主表的结果集为N2,如果N1/N2的值较大(例如超过10%,CBO认为走索引+回表的代价大于走全表扫描),此时执行计划就不会走索引

暂无图片 评论
暂无图片 有用 0
田弼元

可能是发生了转换没法走,也可能是统计信息或数据分布导致CBP认为不该走,又或者不走索引反而更快。建议先看看执行计划,然后加hint提示走索引,再看看执行计划

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏