索引失效原因記錄

查找網上許多博客,方便以後查閱,在此記錄總結:

1.如果條件中有or,即使其中有條件帶索引也不會使用(這也是爲什麼儘量少用or的原因)
2.對於多列索引,不是使用的第一部分,則不會使用索引
3.如果預估使用全表掃描要比使用索引快,則不使用索引
4.隱式轉換導致索引失效.這一點應當引起重視.也是開發中經常會犯的錯誤.(字符串字段加引號)
5. 對索引列進行運算導致索引失效,我所指的對索引列進行運算包括(+,-,*,/,! 等)
6. 使用Oracle內部函數導致索引失效.對於這樣情況應當創建基於函數的索引.
7. 使用 <> 、not in 、not exist、!= 
8. like "%_" 百分號在前(可採用在建立索引時用reverse(columnName)這種方法處理),以%結尾則可以走索引
9. 當變量採用的是times變量,而表的字段採用的是date變量時.或相反情況。
10. 不要在 SQL 代碼中使用雙引號。
11. 將索引所在表空間和數據所在表空間分別設於不同的磁盤chunk上,有助於提高索引查詢的效率。
12. Oracle默認使用的基於代價的SQL優化器(CBO)非常依賴於統計信息,一旦統計信息不正常,會導致數 據庫查詢時不使用索引或使用錯誤的索引。
13. Oracle在進行一次查詢時,一般對一個表只會使用一個索引.
14. 優先且儘可能使用分區索引。
15. 無論是 IS NULL 還是 IS NOT NULL ,是在不同的表數據結構環境下,有可能會利用索引有可能不利用索引,而決定如何執行查詢的標準就是性能。
16.建立了(object_id,1)這樣一個複合索引,而常量“1”的存在,將會使表中的所有行都能夠進行索引,
    這樣使得如“select * from t where object_id is null”這樣的sql也能夠使用索引,這在null值非常少時,能夠大幅度提升sql的性能。
 

借鑑:https://blog.csdn.net/zq9017197/article/details/7089332

       https://wendyqun.iteye.com/blog/1701402

     https://www.cnblogs.com/hongfei/archive/2012/10/20/2732589.html

特別感謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章