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

15835944061.jpg

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

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

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

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

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

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

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

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

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

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

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
win下一个单机oracle11g数据库,之前到处blob字段的数据,处理速度也很快,从昨天下午突然就慢了,数据库没有做参数的修改,数据库访问正常,工具可以正常连接,就是在上传blob字段时速度慢,能定位哪里的问题吗?
回答 2
先从数据库层排查,死锁,表空间,系统性能都没问题,就扩展了一下system表空间,前台业务系统处理速度就变快了也不知道哪里的问题
请问,oracle 数据库吞吐量取决于哪些方面?
回答 2
已采纳
底层:CPU、内存、磁盘I/O、网络带宽等。数据库层:衡量数据库吞吐量的主要指标是TPS,即数据库每秒可以处理的事务数。
物化视图增量刷新显示刷新成功,但数据没刷过来
回答 10
升级问题到:紧急故障
oracle高版本能不能兼容低版本的?
回答 2
已采纳
不会的,,客户端可以兼容低版本,低版本如果要连高版本就需要配置一下sqlnet文件。可参考:Oracle客户端与服务端的版本兼容列表–Client/ServerInteroperabilitySupp
Oracle 数据库越来越臃肿,查询越来越慢,有什么简单办法提高性能?
回答 4
1、优化sql2、改成分区表3、整理表碎片
oracle12c在windows上的权限问题
回答 3
看你的目录有D:\APP\ADMINISTRATOR字体,感觉应该之前是用administrator用户创建的吧?你看下现在你操作系统中是否禁用了超级管理员用户?尝试使用超级管理员administra
oracle 逻辑读 读的是哪部分内容?
回答 2
已采纳
我理解逻辑读就是buffercache里的块数据,因为这个属于整个读的数据里的大头,至于说librarycache里的数据在sql执行的过程中还是小部分。
不使用dbms_backup_restore.resetcfileSection(11)能否清楚控制文件
回答 1
暂无文字回复
以下哪些方法,有可能可以改善 log file parallel write的平均时延?
回答 2
已采纳
A.在某些条件下,设置NOLOGGING的工作方式。这个方法可以减少redo日志的生成量,例如在批量导入操作等场景下。不过,这需要满足特定条件,并且不适用于所有情况,因为NOLOGGING模式会牺牲事
ORACLE中between and是包含两边边界的吗?
回答 2
已采纳
IDbetweenAandB类似于A<ID<B