暂无图片
oracle 索引失效的原因
我来答
分享
zhang
2023-09-20
oracle 索引失效的原因
select * from table_a where create_time> #{beginTime}
复制

上面的查询语句,table_a表 create_time 建的有索引,在beginTime的值不同时,会出现有时候走索引有时候不走索引的情况:
beginTime=sysdate-1 不走索引
beginTime=sysdate-1/24 走索引
beginTime=sysdate-20/24 走索引
beginTime=sysdate-23/24 不走索引

奇怪的是,在不同的环境下,走不走索引的条件是不一样的,
上面举例的环境里该表数据量在200万,而同样的表(同样的索引)在另一个环境里(数据量2000万)beginTime=sysdate-3时才会不走索引。

我想了解的是,这里不走索引的判断逻辑是什么,是不是跟数据库设置有关系?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
刘晓华

与谓词选出的记录数跟总的记录数的比例有关, 选出的记录少就走索引,有个参数Optimizer_index_cost_adj是设置这个比例的。

暂无图片 评论
暂无图片 有用 4
打赏 0
zhang

image.png

刚看了看两个环境的数据库这个参数都是100

暂无图片 评论
暂无图片 有用 0
打赏 0
Thomas

OPTIMIZER_INDEX_COST_ADJ可以设置小一点,比如50或25,再试试

暂无图片 评论
暂无图片 有用 3
打赏 0
张sir

create_time的值的分布一样吗?统计信息一样吗?你可以跑一个10053看一下,oracle是怎么评估的,

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


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏