1、建立組合索引,但查詢謂詞并未使用組合索引的第一列,此處有一個INDEX SKIP SCAN概念。
2、在包含有null值的table列上建立索引,當(dāng)時使用select count(*) from table時不會使用索引。
3、在索引列上使用函數(shù)時不會使用索引,如果一定要使用索引只能建立函數(shù)索引。
4、當(dāng)被索引的列進(jìn)行隱式的類型轉(zhuǎn)換時不會使用索引。如:select * from t where indexed_column = 5,而indexed_column列建立索引但類型是字符型,這時Oracle會產(chǎn)生
隱式的類型轉(zhuǎn)換,轉(zhuǎn)換后的語句類似于select * from t where to_number(indexed_column) = 5,此時不走索引的情況類似于case3。日期轉(zhuǎn)換也有類似問題,如:
select * from t where trunc(date_col) = trunc(sysdate)其中date_col為索引列,這樣寫不會走索引,可改寫成select * from t where date_col >= trunc(sysdate)
and date_col < trunc(sysdate+1),此查詢會走索引。
5、并不是所有情況使用索引都會加快查詢速度,full scan table 有時會更快,尤其是當(dāng)查詢的數(shù)據(jù)量占整個表的比重較大時,因?yàn)閒ull scan table采用的是多塊讀,
當(dāng)Oracle優(yōu)化器沒有選擇使用索引時不要立即強(qiáng)制使用,要充分證明使用索引確實(shí)查詢更快時再使用強(qiáng)制索引。
6、<>
7、like’%dd’百分號在前