Oracle 索引失效的六大限制条件

【原创】能使 Oracle 索引失效的六大限制条件

Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反。

例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracle还是会执行一次全表扫描,查询的性能不会比不加索引有所提高,反而可能由于数据库维护索引的系统开销造成性能更差。 下面就是总结的能使 Oracle 索引失效的七大限制条件。

1. 没有 WHERE 子句

2. 使用 IS NULL 和 IS NOT NULL

SELECT ... FROM emp WHERE comm IS NULL; comm 列的索引会失效

3. WHERE 子句中使用函数

如果没有使用基于函数的索引,那么 where 子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。例如:

select * from staff where trunc(birthdate) = '01-MAY-82';

但是把函数应用在条件上,索引是可以生效的,把上面的语句改成下面的语句,就可以通过索引进行查找。

select * from staff where birthdate < (to_date('01-MAY-82') + 0.9999);

注意:对于 MIN, MAX 函数,Oracle 仍然使用索引。

4. 使用 LIKE ‘%T’ 进行模糊查询

5. WHERE 子句中使用不等于操作

不等于操作包括:<>, !=, NOT colum >= ?, NOT colum <= ?

对于这个限制条件可以通过 OR 替代,例如: colum <> 0  ===>   colum>0 OR colum<0

6. 等于和范围索引不会被合并使用

SELECT emp_id, emp_m, salary_q ... FROM emp WHERE job='manager' AND deptno>10

job 和 deptno 都是非唯一索引,这种条件下 oracle 不会合并索引,它只会使用第一个索引。

7. 比较不匹配数据类型

dept_id是一个varchar2型的字段,在这个字段上有索引,但是下面的语句会执行全表扫描。

select * from dept where dept_id = 900198;

这是因为 oracle 会自动把 where 子句转换成 to_number(dept_id)=900198,相当于使用函数,这样就限制了索引的使用。正确写法如下:

select * from dept where dept_id = '900198';

转载于:https://www.cnblogs.com/obamam/p/7478456.html

Oracle 索引失效的六大限制条件相关推荐

  1. 能使Oracle索引失效的六大限制条件

    例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的.oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了 ...

  2. oracle 检查索引失效,oracle 索引失效原因_汇总

    1) 没有查询条件,或者查询条件没有建立索引 2) 在查询条件上没有使用引导列 3) 查询的数量是大表的大部分,应该是30%以上. 4) 索引本身失效 5) 查询条件使用函数在索引列上,或者对索引列进 ...

  3. 索引忽然失效Oracle,Oracle索引失效原因及解决方法

    一.Oracle索引失效的原因 1使用否定关键字 !=, <> ,not in,not exist select * fromdrama where id <> 1,Mysql ...

  4. Oracle索引失效问题

    Oracle 索引不起作用的几种情况: 1,<> 2,单独的>,<,(有时会用到,有时不会) 3,like "%_" 百分号在前.(可采用在建立索引时用re ...

  5. oracle对sga统计信息不对,oracle 索引失效原因及解决方法

    一.以下的方法会引起索引失效 ‍1,<> 2,单独的>, 3,like "%_" 百分号在前. 4,表没分析. 5,单独引用复合索引里非第一位置的索引列. 6,字 ...

  6. ORACLE 索引失效的原因与解决

    一.以下的方法会引起索引失效‍1,<> 2,单独的>,<,(有时会用到,有时不会) 3,like "%_" 百分号在前. 4,表没分析. 5,单独引用复合索 ...

  7. oracle 索引-1无效,oracle 索引失效原因及解決方法

    一.以下的方法會引起索引失效 ‍1,<> 2,單獨的>, 3,like "%_" 百分號在前. 4,表沒分析. 5,單獨引用復合索引里非第一位置的索引列. 6,字 ...

  8. ORACLE索引失效,更新统计信息

    有时候建立索引的时候不走索引,排除了字段数据问题和sql写法问题,索引失效的问题之外,还得考虑是统计信息过旧,得重新收集.查看表的统计信息,看 user_index 的last_analyze(索引) ...

  9. oracle字符索引丢失,Timestamp导致Oracle索引失效

    问题的起因是DBA通知说在一套之前上线的系统中,对日期创建索引无法生效,导致大量的日期查询效率无法通过创建索引得到提升.通过分析得出如下的结论: 在JDBC中一般通过prepareStatement的 ...

最新文章

  1. 针对测试行业,新人的一些建议:我适合做测试吗?
  2. Windows PE 第十章 加载配置信息
  3. 2016/3/10 PHP (超文本预处理器) 是什么?
  4. Python 技术篇-使用opencv读取图片实例演示,python安装opencv库
  5. Linux 内核开发资料
  6. 【控制】《多无人机协同控制技术》周伟老师-第1章-无人机协同控制技术概述
  7. K-means Algorithm 聚类算法
  8. MySQL用户管理和权限管理
  9. left join 和inner join关联查询区别
  10. 通过BitmapFactory.Options解决activity之间传递图片出现内存溢出(OOM)问题
  11. 网抑云了是什么意思,网抑云语录有哪些,网抑云网抑云梗表情包
  12. python学习笔记(十一)-python程序目录工程化
  13. 素数判定 [2009年哈尔滨工业大学计算机研究生机试真题]
  14. 潜意识的力量:潜意识开发四大关键
  15. tomcat端口被占用的解决方式
  16. 【Python量化】 Scipy库求解最优资产投资组合
  17. 多个安卓设备投屏到电脑_安卓手机怎么投屏到电脑上?这样做,在电脑上就能操控手机...
  18. 两个路由器如何通过一根网线组建局域网(非wifi桥接方式)
  19. Win XP iis组件补丁(ghost xp)iis5.1
  20. 您该怎样科学地准备过年?

热门文章

  1. 一文带你了解目前的“光伏母亲公路” 能照明充电和融雪
  2. Oracle官方并发教程之不可变对象
  3. DNS配置,主从,子域,转发
  4. 细数被程序员吐糟的9大困难(转)
  5. Python源代码文件的文本编码
  6. 蓝桥杯 ALGO-141 算法训练 P1102
  7. c#与马扎克通讯_马扎克伺服报警
  8. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration的解决
  9. python数组写入txt
  10. java 去除jsonarray里面jsonarray的重复和合并数据