ORACLE索引被抑制情况

简介: 前言、在做数据库调优的很多情况下,都可以通过增加索引来提高数据库的性能,但是有些情况下DBA也是无能为力的,因为该有的索引都已经创建了,但是由于开发人员所写的SQL语句的问题导致不能走索引,那么这种情况下就需要修改语句来; 测试环境的说明:  ...

前言、在做数据库调优的很多情况下,都可以通过增加索引来提高数据库的性能,但是有些情况下DBA也是无能为力的,因为该有的索引都已经创建了,但是由于开发人员所写的SQL语句的问题导致不能走索引,那么这种情况下就需要修改语句来;

测试环境的说明:

 

情况一、TO_CHAR和TO_DATE的使用

以下两条语句实现的功能都是一样的,但是两条的执行计划是不一样的,有一条会走索引,还有一条不走索引:

select count(*)   From JOHN WHERE LASTRUNTIME>TO_DATE('2014-03-05 11:00:00','yyyy-MM-dd HH24:mi:ss');

select count(*)   From JOHN WHERE  TO_CHAR(LASTRUNTIME,'yyyy/MM/dd HH24:mi:ss')>'2014-03-05 11:00:00';

 

原因:JOHN_TIME索引记录的是DATA的值,而不是to_char后的值,所以语句一会走索引,语句二走全表扫描;

 

情况二、在条件中使用表达式

select count(*)   From JOHN WHERE LASTRUNTIME>SYSDATE-100;

select count(*)   From JOHN WHERE LASTRUNTIME-100>SYSDATE;

 

原因:JOHN_TIME索引记录的是DATA的值,而不是DATA-100后的值;

 

总结:1、不要轻易在字段前增加函授;

          2、尽量不要将字段嵌入到表达式中;

总而言之:就是有索引的那列不能进行任何的相关操作,单独的放在等式的一边;

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本文作者:JOHN

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 )  

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

相关文章
|
8月前
|
SQL Oracle 关系型数据库
Oracle-index索引解读
Oracle-index索引解读
212 0
|
2月前
|
SQL Oracle 关系型数据库
[Oracle]索引
本文介绍了数据库索引的基本概念、优化查询的原理及分类。索引是一种数据结构(如B树或B+树),通过排序后的`rowid`来优化查询性能。文章详细解释了索引的构建过程、B+树的特点及其优势,并介绍了五种常见的索引类型:唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。每种索引都有其适用场景和限制,帮助读者更好地理解和应用索引技术。
81 1
[Oracle]索引
|
索引
Oracle-序列、索引和同义词
Oracle-序列、索引和同义词
58 0
|
8月前
|
存储 Oracle 关系型数据库
Oracle索引知识看这一篇就足够
Oracle索引知识看这一篇就足够
|
8月前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
存储 SQL Oracle
Oracle优化避免索引失效
Oracle优化避免索引失效
385 0
|
存储 Oracle 关系型数据库
9-6 Oracle 管理索引
9-6 Oracle 管理索引