mysql索引失效情況

2021-09-02 15:38:54 字數 1256 閱讀 9198

1) 沒有查詢條件,或者查詢條件沒有建立索引 

2) 在查詢條件上沒有使用引導列 

3) 查詢的數量是大表的大部分,應該是30%以上。 

4) 索引本身失效

5) 查詢條件使用函式在索引列上,或者對索引列進行運算,運算包括(+,-,*,/,! 等) 錯誤的例子:select * from test where id-1=9; 正確的例子:select * from test where id=10; 

6) 對小表查詢 

7) 提示不使用索引

8) 統計資料不真實 

9) cbo計算走索引花費過大的情況。其實也包含了上面的情況,這裡指的是表占有的block要比索引小。 

10)隱式轉換導致索引失效.這一點應當引起重視.也是開發中經常會犯的錯誤. 由於表的字段tu_mdn定義為varchar2(20),但在查詢時把該字段作為number型別以where條件傳給oracle,這樣會導致索引失效. 錯誤的例子:select * from test where tu_mdn=13333333333; 正確的例子:select * from test where tu_mdn='13333333333'; 

12) 1,<> 2,單獨的》,<,(有時會用到,有時不會) 

13,like "%_" 百分號在前. 

4,表沒分析. 

15,單獨引用復合索引裡非第一位置的索引列. 

16,字元型字段為數字時在where條件裡不新增引號. 

17,對索引列進行運算.需要建立函式索引. 

18,not in ,not exist. 

19,當變數採用的是times變數,而表的字段採用的是date變數時.或相反情況。 

20,b-tree索引 is null不會走,is not null會走,位圖索引 is null,is not null 都會走 

21,聯合索引 is not null 只要在建立的索引列(不分先後)都會走, in null時 必須要和建立索引第一列一起使用,當建立索引第一位置條件是is null 時,其他建立索引的列可以是is null(但必須在所有列 都滿足is null的時候),或者=乙個值; 當建立索引的第一位置是=乙個值時,其他索引列可以是任何情況(包括is null =乙個值),以上兩種情況索引都會走。其他情況不會走。

22.如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什麼盡量少用or的原因)

注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引

23.如果mysql估計使用全表掃瞄要比使用索引快,則不使用索引

Mysql索引失效情況

mysql索引失效有以下幾種情況 但是如果想讓以 開頭仍然使用索引,則需要使用覆蓋索引,即只查詢帶索引欄位的列 explain select name from user where name like 張三 explain select name,age,address from user whe...

mysql索引失效的情況

1.如果條件中有or,即使其中有條件帶索引也不會使用 這也是為什麼盡量少用or的原因 注意 要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引 2.對於多列索引,不是使用的第一部分 第乙個 則不會使用索引 聯合索引 3.like查詢是以 開頭 4.如果列型別是字串,那一定要在條件中將資...

MySQL索引失效的幾種情況

更準確的說,單列索引不儲存null值,復合索引不儲存全為null的值。索引不能儲存null,所以對這列採用is null條件時,因為索引上根本 沒null值,不能利用到索引,只能全表掃瞄。為什麼索引列不能存null值?將索引列值進行建樹,其中必然涉及到諸多的比較操作。null值的特殊性就在於參與的運...