为何重复值高的字段不能建索引(好比性别字段等)

 

 结论(以innodb为例)spa

a、非聚簇索引存储了对主键的引用,若是select字段不在非聚簇索引内,就须要跳到主键索引(上图中从右边的索引树跳到左边的索引树),再获取select字段值blog

b、若是非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的状况,致使整个流程很慢排序

c、若是where值重复率高的字段,select用了limit,只查较少数据,也就是跳的次数不多的状况下,仍是能够建索引的(后来想一想也不必,limit限制了数量,全表扫描也很快,除非字段值是排序的,必须扫描完前面的全部值)索引

d、若是没有3这个前提,则不建议在值重复率高的字段上建索引,由于查询效率低,还须要维护索引it

相关文章
相关标签/搜索