MySQL索引是提高查詢性能的重要因素,但是有時候會出現索引失效的狀態(tài),導致查詢變慢。這是因為MySQL優(yōu)化器在執(zhí)行SQL語句時,根據不同的情況選擇最優(yōu)的執(zhí)行計劃,有時優(yōu)化器并不會選擇使用索引而是使用全表掃描。下面我們來分析幾種出現索引失效的情況。
1. 使用了函數
SELECT * FROM table WHERE DATE(create_time) = '2021-01-01';
當在WHERE條件中使用了函數時,優(yōu)化器無法使用索引進行優(yōu)化。可以將查詢條件改為:
SELECT * FROM table WHERE create_time >= '2021-01-01 00:00:00' AND create_time< '2021-01-02 00:00:00';
2. 對索引列進行了運算
SELECT * FROM table WHERE id + 1 = 100;
當在WHERE條件中對索引列進行了運算時,也會導致索引失效。可以將查詢條件改為:
SELECT * FROM table WHERE id = 99;
3. OR條件
SELECT * FROM table WHERE id = 1 OR name = 'john';
對于OR條件,MySQL只能使用一個索引進行優(yōu)化,如果兩個條件對應的索引不同,則會導致其中一個條件失效。可以將查詢條件改為:
SELECT * FROM table LEFT JOIN ( SELECT id FROM table WHERE name = 'john' ) AS jt ON table.id = jt.id WHERE table.id = 1 OR jt.id IS NOT NULL;
4. LIKE查詢
SELECT * FROM table WHERE name LIKE '%john%';
LIKE查詢中以%開頭的查詢無法使用索引進行優(yōu)化。可以將查詢條件改為:
SELECT * FROM table WHERE name LIKE 'john%';
以上是MySQL索引失效的一些情況,希望大家在開發(fā)過程中避免出現以上情況,提高查詢性能。
下一篇mysql索引有效時間