爲何重複值高的字段不能建索引(好比性別字段等)

 

 結論(以innodb爲例)spa

a、非聚簇索引存儲了對主鍵的引用,若是select字段不在非聚簇索引內,就須要跳到主鍵索引(上圖中從右邊的索引樹跳到左邊的索引樹),再獲取select字段值blog

b、若是非聚簇索引值重複率高,那麼查詢時就會大量出現上圖中從右邊跳到左邊的狀況,致使整個流程很慢排序

c、若是where值重複率高的字段,select用了limit,只查較少數據,也就是跳的次數不多的狀況下,仍是能夠建索引的(後來想一想也不必,limit限制了數量,全表掃描也很快,除非字段值是排序的,必須掃描完前面的全部值)索引

d、若是沒有3這個前提,則不建議在值重複率高的字段上建索引,由於查詢效率低,還須要維護索引it

相關文章
相關標籤/搜索