ORACLE索引被抑制情況

wzq609發表於2014-06-04

前言、在做資料庫調優的很多情況下,都可以透過增加索引來提高資料庫的效能,但是有些情況下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索引記錄的是DA他的值,而不是to_char後的值,所以語句一會走索引,語句二走全表掃描;

 

情況二、在條件中使用表示式

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

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

 

原因:JOHN_TIME索引記錄的是DA他的值,而不是DATA-100後的值;

 

總結:1、不要輕易在欄位前增加函授;

          2、儘量不要將欄位嵌入到表示式中;

總而言之:就是有索引的那列不能進行任何的相關操作,單獨的放在等式的一邊;

 

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

本文作者:JOHN

ORACLE技術部落格:ORACLE 獵人筆記               資料庫技術群:367875324 (請備註ORACLE管理 )  

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-1175609/,如需轉載,請註明出處,否則將追究法律責任。

相關文章