索引失效原因记录

查找网上许多博客,方便以后查阅,在此记录总结:

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
2.对于多列索引,不是使用的第一部分,则不会使用索引
3.如果预估使用全表扫描要比使用索引快,则不使用索引
4.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.(字符串字段加引号)
5. 对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)
6. 使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.
7. 使用 <> 、not in 、not exist、!= 
8. like "%_" 百分号在前(可采用在建立索引时用reverse(columnName)这种方法处理),以%结尾则可以走索引
9. 当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
10. 不要在 SQL 代码中使用双引号。
11. 将索引所在表空间和数据所在表空间分别设于不同的磁盘chunk上,有助于提高索引查询的效率。
12. Oracle默认使用的基于代价的SQL优化器(CBO)非常依赖于统计信息,一旦统计信息不正常,会导致数 据库查询时不使用索引或使用错误的索引。
13. Oracle在进行一次查询时,一般对一个表只会使用一个索引.
14. 优先且尽可能使用分区索引。
15. 无论是 IS NULL 还是 IS NOT NULL ,是在不同的表数据结构环境下,有可能会利用索引有可能不利用索引,而决定如何执行查询的标准就是性能。
16.建立了(object_id,1)这样一个复合索引,而常量“1”的存在,将会使表中的所有行都能够进行索引,
    这样使得如“select * from t where object_id is null”这样的sql也能够使用索引,这在null值非常少时,能够大幅度提升sql的性能。
 

借鉴:https://blog.csdn.net/zq9017197/article/details/7089332

       https://wendyqun.iteye.com/blog/1701402

     https://www.cnblogs.com/hongfei/archive/2012/10/20/2732589.html

特别感谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值