索引什麼時候須要、什麼時候不須要、什麼時候失效

總結自:https://blog.csdn.net/weixin_39420024/article/details/80040549mysql

前提:每次查詢都只能使用一個索引sql

緣由:比起全表掃描,分析兩個索引B+表更耗時函數

 

什麼時候須要索引?spa

一、所查詢字段是主鍵(主鍵能夠認爲是索引).net

二、和其餘表作鏈接查詢的字段blog

三、在where裏使用>、≥,=,<,≤,<>,is null和between等字段索引

四、不以通配符開始的like,如'aa%'字符串

五、彙集函數max()、sum()等使用得字段im

六、order by和group by的字段總結

 

什麼時候不須要索引?

一、表記錄不多

二、數據重複且分佈平均

三、常常插入、刪除、修改的表

四、text、image等數據量大的類型

五、特殊狀況,有時mysql會估算這次查詢,全表掃描比使用索引更爲省時,則不會使用索引

 

索引錯誤使用情形總結:

一、組合索引未使用最左前綴,例如:組合索引(a,b),而查詢條件是where b="1"

二、like通配符在最左邊,例如:where a like '%aa'

三、在查詢條件中使用索引,order by裏也使用索引,例如:where a='1' order by b,由於每次查詢只會使用一個索引,這裏只會使用a的索引

四、or會使得索引失效,例如:where a= 1 or b=2

特殊狀況:若or兩邊的條件使用的字段同樣,索引依舊會有效,例如:where a=1 or a=2

五、若是列類型是字符串,要使用引號。例如where A='China',不然索引失效(會進行類型轉換)

六、在索引列上的操做,函數(upper()等)、or、!=(<>)、not in等

相關文章
相關標籤/搜索