結論(以innodb爲例)spa
a、非聚簇索引存儲了對主鍵的引用,若是select字段不在非聚簇索引內,就須要跳到主鍵索引(上圖中從右邊的索引樹跳到左邊的索引樹),再獲取select字段值blog
b、若是非聚簇索引值重複率高,那麼查詢時就會大量出現上圖中從右邊跳到左邊的狀況,致使整個流程很慢排序
c、若是where值重複率高的字段,select用了limit,只查較少數據,也就是跳的次數不多的狀況下,仍是能夠建索引的(後來想一想也不必,limit限制了數量,全表掃描也很快,除非字段值是排序的,必須掃描完前面的全部值)索引
d、若是沒有3這個前提,則不建議在值重複率高的字段上建索引,由於查詢效率低,還須要維護索引it