1. 程式人生 > 資料庫 >Mysql索引失效的條件

Mysql索引失效的條件

1、以%開頭的模糊查詢,如:

select id from user where name like '%白';

2、where語句中使用不等於( != 或 <> )

select id from user where name != '張三';
select id from user where name <> '張三';

3、where語句中使用or,or跟隨的條件必須加上索引,否則索引失效

#此時name和age欄位必須都有索引
select id from user where name like '張%' or age = 18;

4、where語句中使用函式

select id from user where datediff(start, end) = 1;
#DATEDIFF日期函式,該函式返回前一個日期減去後一個日期的差值

5、where語句中對欄位表示式計算操作

select id from user where age * 2 = 20;

6、查詢條件為字串型別,未使用引號

select id from user where name = 10086; #失效
select id from user where name = '10086';

7、where語句中使用Not In

select id from user where age not in (select age from user where money < 1000);

8、組合索引時,未遵循最左原則

  最左字首原則:顧名思義是最左優先,以最左邊的為起點任何連續的索引都能匹配上。

(1)如果第一個欄位是範圍查詢需要單獨建一個索引;

(2)在建立組合索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊;

當建立(a,b,c)組合索引時,想要索引生效的話,只能使用 a、ab、abc、ac四種組合!

例項:以下是常見的幾個查詢:

SELECT `a`,`b`,`c` FROM A WHERE `a`='a1' ; //索引生效
SELECT `a`,`b`,`c` FROM A WHERE `b`='b2' AND `c`='c2'; //索引失效
SELECT `a`,`b`,`c` FROM A WHERE `a`='a3' AND `c`='c3'; //索引生效,實際上值使用了索引a