文档章节

ORACLE会使索引失效的条件

jianchen98
 jianchen98
发布于 2015/12/16 22:22
字数 394
阅读 9
收藏 0

     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';

© 著作权归作者所有

上一篇: oracle表分区详解
下一篇: java面试题
jianchen98
粉丝 2
博文 5
码字总数 4529
作品 0
私信 提问
关于SQL的优化

在大数据并发处理中,很容易发生系统hang机。 此处应该考虑两点,系统锁死,或者IO流异常 1.IO流异常 在系统查询大量数据的时候,我们通常采用索引的方式来优化系统查询。而索引在查询方面会...

Twelve_ZX
2016/10/28
21
0
Oracle SQL的优化规则解析

以下的文章主要介绍的是Oracle SQL的优化规则的推荐方案,如果你是Oracle SQL的优化规则实际应用方面的新手,你就可以通过以下的文章对Oracle SQL的优化规则的推荐方案的实际操作有个更好的了...

wersdffg
2015/10/17
211
0
MYSQL索引失效的各种情形总结

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

zmf
2014/10/23
0
0
Oracle性能优化(SQL)

尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替。 不用NOT IN操作符,可以用NOT EXISTS或者外连接+替代。 Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行...

遵从本心
2013/08/12
0
0
Oracle的隐式转换

都说Oracle存在NUMBER和VARCHAR2类型的隐式转换,严格意义上需要避免,但为何需要避免,从下面的实验进行验证。 1. 创建测试表和索引 create table tn (id number, name varchar2(1)); creat...

bisal
2015/03/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
4
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
13
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部