索引失效原因分类
2015-09-11 21:18
471 查看
1、 没有查询条件,或者查询条件没有建立索引
2、 在查询条件上没有使用复合索引引导列
3、查询的数据量超过了表数据量的15%
4、索引本身失效(status=UNUSABLE)
5、查询条件使用函数在索引列上
6、对小表查询
7、使用hint提示不使用索引
8、统计信息不真实
9、CBO认为走全表扫描比走索引代价小
10、隐式转换导致索引失效
由于表的字段是varchar2类型,但在查询时把该字段作为number类型以where条件传给oracle,这样会导致索引失效。
错误的例子:select * from t2 where id=112
正确的例子:select * from t2 where id='112'
11、对索引列运算导致索引失效
这里的运算包括(+ - * / <> != )
12、使用oracle内部函数导致索引失效,对于这种情况,应该建立函数索引
13、模糊查询%在前
错误的例子:select * from t4 where name like '%aaa%'
正确的例子:select * from t4 where name like 'aaa%'
14、查询条件中or
注意:要想使用or,又想让索引生效,只能将or条件中的每个列加上索引
2、 在查询条件上没有使用复合索引引导列
3、查询的数据量超过了表数据量的15%
4、索引本身失效(status=UNUSABLE)
5、查询条件使用函数在索引列上
6、对小表查询
7、使用hint提示不使用索引
8、统计信息不真实
9、CBO认为走全表扫描比走索引代价小
10、隐式转换导致索引失效
由于表的字段是varchar2类型,但在查询时把该字段作为number类型以where条件传给oracle,这样会导致索引失效。
错误的例子:select * from t2 where id=112
正确的例子:select * from t2 where id='112'
11、对索引列运算导致索引失效
这里的运算包括(+ - * / <> != )
12、使用oracle内部函数导致索引失效,对于这种情况,应该建立函数索引
13、模糊查询%在前
错误的例子:select * from t4 where name like '%aaa%'
正确的例子:select * from t4 where name like 'aaa%'
14、查询条件中or
注意:要想使用or,又想让索引生效,只能将or条件中的每个列加上索引
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- 【DevOps】为什么我们永远疲于奔命?
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- 网络管理之IP地址篇
- 文件的读出 编辑 管理
- PostgreSQL教程(八):索引详解
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累