ORACLE索引被抑制情况

前言、在做数据库调优的很多情况下,都可以通过增加索引来提高数据库的性能,但是有些情况下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管理 )  

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12679300/viewspace-1175609/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12679300/viewspace-1175609/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值