MySQL是一種關系型數據庫管理系統,其數據存儲在表格中,而索引的作用就是幫助MySQL快速的定位到數據,提高數據的訪問效率。但有些情況下,MySQL是不會使用索引的。以下是一些常見情況:
1. 使用非常大的查詢范圍
如果一個查詢將會返回表中90%以上的數據行,MySQL可能會決定掃描整個表,而不是使用索引優化查詢。例如,如果表中有1000000行,但一個查詢將返回其中990000行,此時使用索引一般不會有效果。
2. 在大表中使用LIKE查詢
在一個非常大的表中使用LIKE查詢語句會很慢,特別是沒有使用通配符的情況下。比如在表的一個固定字段中查找一個恰好匹配的值,使用LIKE語句可能會阻止MySQL使用索引。
3. 使用自動類型轉換
如果查詢中將一個字符型字段與一個數字相比較,則MySQL必須進行自動類型轉換。如果將字段類型轉換為數字時發現有一個函數,將改變字段的值,則 MySQL不能使用索引,因為索引默認會檢索原值,而不會檢索轉換后的值。例如,查詢一個VARCHAR(10)字段,其中存儲數字串,MySQL不會將其視為數字,而將字符串有前導零進行處理,此時的處理結果與字符'65321'可能是相等的,但在進行索引掃描時則不同。
4. 對大表進行連接操作
如果連接表中的一張或多張表非常大,則使用一定的策略會防止MySQL使用索引,而選擇直接進行劃分表掃描。
5. 篩選條件為NULL
當查詢中使用了“WHERE column_name IS NULL”這樣的查詢條件,MySQL不會使用索引,即使該字段上有定義索引,原因是MySQL必須掃描特定的記錄位置以找到所需的行。
以上是一些常見使用不使用索引的情況,需要注意這些情況,才能更好的利用索引提高MySQL的查詢效率。