创建Oracle 索引的目的是为了避免全表扫描数据,提高查询效率,但是如果sql语句写的不好致使索引失效,反而会影响数据查询效率。以下几种情况就会导致索引失效:

1. 没有 WHERE 子句
众所周知,添加索引的字段必需要在where条件后适当使用才会生效,如果连查询条件都没有,那肯定不会用到索引的。

2. 使用 IS NULL 和 IS NOT NULL
select … from emp where colnum is null; colnum列的索引会失效
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’ 进行模糊查询
select * from student where name like ‘aaa%’ ; // ‘aaa%’ 会用到索引
select * from student where name like ‘%aaa’ ; //’%aaa’ 或者 ‘_aaa’ 不会使用索引

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 temp where dept_id = 100101;
这是因为 oracle 会自动把 where 子句转换成 to_number(dept_id)=900198,相当于使用函数,这样就限制了索引的使用。正确写法如下:
select * from temp where dept_id = ‘100101’;

oracle数据库中索引会失效的几种情况相关推荐

  1. oracle or索引失效_oracle数据库中索引会失效的几种情况

    创建Oracle 索引的目的是为了避免全表扫描数据,提高查询效率,但是如果sql语句写的不好致使索引失效,反而会影响数据查询效率.以下几种情况就会导致索引失效: 没有 WHERE 子句 众所周知,添加 ...

  2. Oracle数据库中索引的维护

    本文只讨论Oracle中最常见的索引,即是B-tree索引.本文中涉及的数据库版本是Oracle8i. 一. 查看系统表中的用户索引 在Oracle中,SYSTEM表是安装数据库时自动建立的,它包含数 ...

  3. Mysql索引会失效的几种情况分析

    转自:http://www.jb51.net/article/50649.htm 在做项目的过程中,难免会遇到明明给mysql建立了索引,可是查询还是很缓慢的情况出现,下面我们来具体分析下这种情况出现 ...

  4. 微信小程序 自定义组件中 triggerEvent() 函数失效的一种情况 (Cannot read property ‘triggerEvent‘ of undefined)

    在网络上并没有搜索到这种情况,这里记录下避免以后的自己和广大码农踩到这个坑 问题描述:在自定义组件中想调用 this.triggerEvent()函数给父组件传参,过程中报错:Cannot read ...

  5. mysql修改表名几种方式_Oracle数据库中修改表名的几种方式

    Oracle数据库中修改表名的几种方式如下:answer1: ALTER TABLE old_table_name RENAME TO new_table_name;(大写为系统命令)answer2: ...

  6. oracle数据库中索值,Oracle数据库中的索引详解

    Oracle数据库中的索引详解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一 ROWID的概念 存储了row在数据文 ...

  7. oracle表重命名 索引,CSS_在Oracle数据库中按用户名重建索引的方法,如果你管理的Oracle数据库下某 - phpStudy...

    在Oracle数据库中按用户名重建索引的方法 如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大 ...

  8. 定时创建oracle索引,oracle数据库关于索引建立及使用的详细介绍

    索引的说明 索引是与表相关的一个可选结构,在逻辑上和物理上都独立于表的数据,索引能优化查询,不能优化DML操作,Oracle自动维护索引,频繁的DML操作反而会引起大量的索引维护. 如果SQL语句仅访 ...

  9. oracle数据库支持2颗cpu,2.3 Oracle数据库中常见的性能问题

    2.3 Oracle数据库中常见的性能问题 这一节列出和描述了Oracle数据库中常见的性能问题.通过下面的Oracle性能调优方法,你应该可以避免这些问题,如果你遇到这些问题了,那么重复前面谈到的O ...

最新文章

  1. Go语言简单的TCP编程
  2. 解决phoenix中创建的表名及字段默认是大写的问题
  3. 遍历一个数据去掉最后一个元素的样式
  4. 消防信号二总线有没电压_春晓161#地块人防工程消防电源监控系统的设计与应用...
  5. mysql 批量_mysql LOAD语句批量录入数据
  6. EduSoho网络课堂通用版
  7. Opencv3 形态学操作
  8. “vmware tools 只能虚拟机中安装”的解决方法
  9. r语言算巢式设计方差分析_R语言入门之效力分析(Power Analysis)
  10. 计算机照片文件大小,怎么把照片文件大于30k
  11. 在word文档中插入代码_如何在自动更新的Word文档中插入当前的月份和年份
  12. 快速美化封面用word就可以
  13. 关于中医把脉的一点想法
  14. git push 遇到 error: cannot update the ref ‘refs/remotes/origin/master‘: Permission denied
  15. 川土微电子 | CA-IF1051 CAN-FD收发器
  16. 俺老孙画个圈-板框与安装孔-PCB系列教程1-10
  17. matlab 运算符
  18. 4.6 案例10 使用QList处理数据集
  19. 手机QQ视频图像是反的——解决办法
  20. 子域名爆破工具subDomainsBrute

热门文章

  1. [转载] Python3中的表达式运算符
  2. string中concat_JavaScript中带示例的String concat()方法
  3. mysql 模拟序列_【原创】MySQL 模拟PostgreSQL generate_series 表函数
  4. java 使用接口便于维护程序_Java初学——面向对象接口的应用
  5. duration java_Java Duration类| toHours()方法与示例
  6. MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!
  7. 漫画:什么是归并排序?
  8. 解决React Native unable to load script from assets index.android.bundle on windows
  9. 【MATLAB】求点到多边形的最短距离
  10. 安卓安装kali linux之Termux