例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 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.2cto.com/database/201512/452441.html

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

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

    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. MFC中利用CFileDialog选择文件并读取文件所遇到的问题和解决方法
  2. 模型压缩、模型剪枝、模型部署
  3. idea python-IDEA里如何安装Python插件打造开发环境(图文详解)
  4. 光盘压制:八种加密方法保护光盘数据安全
  5. mysql编写完怎么执行_面试官:一条MySQL更新语句是如何执行的?
  6. type traits
  7. 关于2014年上半年全国计算机等级考试有关事宜的通知,关于2014年上半年全国计算机等级考试报名的通知...
  8. MySQL Study之--MySQL schema_information数据库
  9. 通俗易懂地讲解 __block 变量
  10. webpack2.x 中文文档 翻译 之 依赖管理 Dependency Management
  11. 天津大学网页设计与制作答案合集
  12. HTML5期末考核大作业——学生网页设计作业源码HTML+CSS+JavaScript 中华美德6页面带音乐文化
  13. TBS1237 1/4 扫 48 通道 LED 背光驱动芯片
  14. 实现语音视频录制源码分享
  15. 网络三定律:摩尔定律、吉尔德定律和迈特卡夫定律
  16. 贷款违约行为的ANOVA分析——关于不同抽样方法得到不同结论的分析
  17. matlab石碑提取,罗塞塔石碑-高尔夫代码:Tic Tac T
  18. java8/日期时间
  19. OAI-PMH:元数据获取标准
  20. 保护个人隐私,你需要养成这8个习惯

热门文章

  1. vs移植的.exe再编译无法更新_CODE|编译带PDAL的cloudcompare(补充)
  2. java cache教程_Java 中常用缓存Cache机制的实现
  3. Roman and Browser-罗曼的浏览器 CodeForce1100A 暴力
  4. ActiveMQ之消息服务器平台(发邮件)
  5. token验证+vuex的localStorage应用
  6. HDU3930(离散对数与原根)
  7. mybatis初学习
  8. 查询数据插入别一张表中
  9. Linux按键驱动,中断实现流程
  10. 中国人民大学金琴老师组,AI·M^3实验室招募视觉与语言方向硕博