索引何時需要、何時不需要、何時失效


總結自: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等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM