
結論(以innodb為例)
a、非聚簇索引存儲了對主鍵的引用,如果select字段不在非聚簇索引內,就需要跳到主鍵索引(上圖中從右邊的索引樹跳到左邊的索引樹),再獲取select字段值
b、如果非聚簇索引值重復率高,那么查詢時就會大量出現上圖中從右邊跳到左邊的情況,導致整個流程很慢
c、如果where值重復率高的字段,select用了limit,只查較少數據,也就是跳的次數很少的情況下,還是可以建索引的(后來想想也沒必要,limit限制了數量,全表掃描也很快,除非字段值是排序的,必須掃描完前面的所有值)
d、如果沒有3這個前提,則不建議在值重復率高的字段上建索引,因為查詢效率低,還需要維護索引
