请问,我在某张表上建了一个索引,可是执行计划并没有走这个索引,这是为什么?
5M
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
4条回答
默认
最新
执行计划是否选择走索引是和数据表的统计信息、数据分布、条件列的选择率有关。CBO会从可能的执行计划中选择出cost最低的执行计划来执行SQL。所以,您的这个情况可能是:
1.统计信息不准确;
2.条件分布不均匀,条件列的可选择度低(比如,满足的这个条件为数据中的大部分);
此时,CBO认为走全表扫描的成本要比走索引更小,效率会更高,此时就会选择走全表。
您可以通过加index的hint强制走该索引,然后看看cost值和走全表的cost那个小,就会比较明朗了。
如果想更深入的了解原因,也可以通过10053事件来对这个SQL进行分析。
评论
有用 0这个是解释计划,用display cursor看下,里面有访问路径,发出来看下,有可能是发生隐士类型转换了
评论
有用 0最直观的计算方法,查一下where后面的两个过滤条件返回的结果集N1,主表的结果集为N2,如果N1/N2的值较大(例如超过10%,CBO认为走索引+回表的代价大于走全表扫描),此时执行计划就不会走索引
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

