>  기사  >  데이터 베이스  >  Oracle索引被抑制情况

Oracle索引被抑制情况

WBOY
WBOY원래의
2016-06-07 16:49:25969검색

在做Oracle数据库调优的很多情况下,都可以通过增加索引来提高数据库的性能,但是有些情况下DBA也是无能为力的,因为该有的索引都

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

测试环境的说明:

由Oracle索引来理解ArcSDE索引

Oracle索引技术之如何建立最佳索引

Oracle索引列NULL值引发执行计划该表的测试示例

Oracle索引 主键影响查询速度

Oracle索引扫描  

情况一、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、尽量不要将字段嵌入到表达式中;

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

本文永久更新链接地址:

linux

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.