能使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.2cto.com/database/201512/452441.html
能使Oracle索引失效的六大限制条件相关推荐
- Oracle 索引失效的六大限制条件
Oracle 索引失效的六大限制条件 [原创]能使 Oracle 索引失效的六大限制条件 Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反. 例如一张表中有上百万条数据,对某 ...
- oracle 检查索引失效,oracle 索引失效原因_汇总
1) 没有查询条件,或者查询条件没有建立索引 2) 在查询条件上没有使用引导列 3) 查询的数量是大表的大部分,应该是30%以上. 4) 索引本身失效 5) 查询条件使用函数在索引列上,或者对索引列进 ...
- 索引忽然失效Oracle,Oracle索引失效原因及解决方法
一.Oracle索引失效的原因 1使用否定关键字 !=, <> ,not in,not exist select * fromdrama where id <> 1,Mysql ...
- Oracle索引失效问题
Oracle 索引不起作用的几种情况: 1,<> 2,单独的>,<,(有时会用到,有时不会) 3,like "%_" 百分号在前.(可采用在建立索引时用re ...
- oracle对sga统计信息不对,oracle 索引失效原因及解决方法
一.以下的方法会引起索引失效 1,<> 2,单独的>, 3,like "%_" 百分号在前. 4,表没分析. 5,单独引用复合索引里非第一位置的索引列. 6,字 ...
- ORACLE 索引失效的原因与解决
一.以下的方法会引起索引失效1,<> 2,单独的>,<,(有时会用到,有时不会) 3,like "%_" 百分号在前. 4,表没分析. 5,单独引用复合索 ...
- oracle 索引-1无效,oracle 索引失效原因及解決方法
一.以下的方法會引起索引失效 1,<> 2,單獨的>, 3,like "%_" 百分號在前. 4,表沒分析. 5,單獨引用復合索引里非第一位置的索引列. 6,字 ...
- ORACLE索引失效,更新统计信息
有时候建立索引的时候不走索引,排除了字段数据问题和sql写法问题,索引失效的问题之外,还得考虑是统计信息过旧,得重新收集.查看表的统计信息,看 user_index 的last_analyze(索引) ...
- oracle字符索引丢失,Timestamp导致Oracle索引失效
问题的起因是DBA通知说在一套之前上线的系统中,对日期创建索引无法生效,导致大量的日期查询效率无法通过创建索引得到提升.通过分析得出如下的结论: 在JDBC中一般通过prepareStatement的 ...
最新文章
- MFC中利用CFileDialog选择文件并读取文件所遇到的问题和解决方法
- 模型压缩、模型剪枝、模型部署
- idea python-IDEA里如何安装Python插件打造开发环境(图文详解)
- 光盘压制:八种加密方法保护光盘数据安全
- mysql编写完怎么执行_面试官:一条MySQL更新语句是如何执行的?
- type traits
- 关于2014年上半年全国计算机等级考试有关事宜的通知,关于2014年上半年全国计算机等级考试报名的通知...
- MySQL Study之--MySQL schema_information数据库
- 通俗易懂地讲解 __block 变量
- webpack2.x 中文文档 翻译 之 依赖管理 Dependency Management
- 天津大学网页设计与制作答案合集
- HTML5期末考核大作业——学生网页设计作业源码HTML+CSS+JavaScript 中华美德6页面带音乐文化
- TBS1237 1/4 扫 48 通道 LED 背光驱动芯片
- 实现语音视频录制源码分享
- 网络三定律:摩尔定律、吉尔德定律和迈特卡夫定律
- 贷款违约行为的ANOVA分析——关于不同抽样方法得到不同结论的分析
- matlab石碑提取,罗塞塔石碑-高尔夫代码:Tic Tac T
- java8/日期时间
- OAI-PMH:元数据获取标准
- 保护个人隐私,你需要养成这8个习惯
热门文章
- vs移植的.exe再编译无法更新_CODE|编译带PDAL的cloudcompare(补充)
- java cache教程_Java 中常用缓存Cache机制的实现
- Roman and Browser-罗曼的浏览器 CodeForce1100A 暴力
- ActiveMQ之消息服务器平台(发邮件)
- token验证+vuex的localStorage应用
- HDU3930(离散对数与原根)
- mybatis初学习
- 查询数据插入别一张表中
- Linux按键驱动,中断实现流程
- 中国人民大学金琴老师组,AI·M^3实验室招募视觉与语言方向硕博