色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql索引有失效狀態(tài)

方一強2年前12瀏覽0評論

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ā)過程中避免出現以上情況,提高查詢性能。