新闻资讯

新闻资讯 通知公告

SQL:索引失效原因记录

编辑:009     时间:2020-03-02
1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
2.对于多列索引,不是使用的第一部分,则不会使用索引
3.如果预估使用全表扫描要比使用索引快,则不使用索引
4.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.(字符串字段加引号)
5. 对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)
6. 使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.
7. 使用 <> 、not in 、not exist、!=
8. like "%_" 百分号在前(可采用在建立索引时用reverse(columnName)这种方法处理),以%结尾则可以走索引
9. 当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
10. 不要在 SQL 代码中使用双引号。
11. 将索引所在表空间和数据所在表空间分别设于不同的磁盘chunk上,有助于提高索引查询的效率。
12. Oracle默认使用的基于代价的SQL优化器(CBO)非常依赖于统计信息,一旦统计信息不正常,会导致数 据库查询时不使用索引或使用错误的索引。
13. Oracle在进行一次查询时,一般对一个表只会使用一个索引.
14. 优先且尽可能使用分区索引。
15. 无论是 IS NULL 还是 IS NOT NULL ,是在不同的表数据结构环境下,有可能会利用索引有可能不利用索引,而决定如何执行查询的标准就是性能。
16.建立了(object_id,1)这样一个复合索引,而常量“1”的存在,将会使表中的所有行都能够进行索引,
    这样使得如“select * from t where object_id is null”这样的sql也能够使用索引,这在null值非常少时,能够大幅度提升sql的性能。

————————————————
版权声明:本文为CSDN博主「Crzis」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ling_du/article/details/84874373
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐