--sunfruit
說明了Oracle數(shù)據(jù)庫中的索引隱式失效的問題
1、隱式轉(zhuǎn)換導(dǎo)致索引失效.這一點(diǎn)應(yīng)當(dāng)引起重視.也是開發(fā)中經(jīng)常會犯的錯誤.
由于表的字段tu_mdn定義為varchar2(20),但在查詢時把該字段作為number類型以where條件傳給Oracle,這樣會導(dǎo)致索引失效.
錯誤的例子:select * from test where tu_mdn=13333333333;
正確的例子:select * from test where tu_mdn='13333333333';
2、對索引列進(jìn)行運(yùn)算導(dǎo)致索引失效,我所指的對索引列進(jìn)行運(yùn)算包括(+,-,*,/,! 等)
錯誤的例子:select * from test where id-1=9;
正確的例子:select * from test where id=10;
3、使用Oracle內(nèi)部函數(shù)導(dǎo)致索引失效.對于這樣情況應(yīng)當(dāng)創(chuàng)建基于函數(shù)的索引.
錯誤的例子:select * from test where round(id)=10; 說明,此時id的索引已經(jīng)不起作用了
正確的例子:首先建立函數(shù)索引,create index test_id_fbi_idx on test(round(id));
然后 select * from test where round(id)=10; 這時函數(shù)索引起作用了