Mysql索引失效的條件
阿新 • • 發佈:2021-01-19
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