總結自:https://blog.csdn.net/weixin_39420024/article/details/80040549
前提:每次查詢都只能使用一個索引
原因:比起全表掃描,分析兩個索引B+表更耗時
何時需要索引?
1、所查詢字段是主鍵(主鍵可以認為是索引)
2、和其他表做連接查詢的字段
3、在where里使用>、≥,=,<,≤,<>,is null和between等字段
4、不以通配符開始的like,如'aa%'
5、聚集函數max()、sum()等使用得字段
6、order by和group by的字段
何時不需要索引?
1、表記錄很少
2、數據重復且分布平均
3、經常插入、刪除、修改的表
4、text、image等數據量大的類型
5、特殊情況,有時mysql會估算此次查詢,全表掃描比使用索引更為省時,則不會使用索引
索引錯誤使用情形總結:
1、組合索引未使用最左前綴,例如:組合索引(a,b),而查詢條件是where b="1"
2、like通配符在最左邊,例如:where a like '%aa'
3、在查詢條件中使用索引,order by里也使用索引,例如:where a='1' order by b,因為每次查詢只會使用一個索引,這里只會使用a的索引
4、or會使得索引失效,例如:where a= 1 or b=2
特殊情況:若or兩邊的條件使用的字段一樣,索引依舊會有效,例如:where a=1 or a=2
5、如果列類型是字符串,要使用引號。例如where A='China',否則索引失效(會進行類型轉換)
6、在索引列上的操作,函數(upper()等)、or、!=(<>)、not in等