MySQL索引原理( 三 )


3.尽量选择区分度高的列作为索引 , 区分度的公式是count(distinct col)/count(*) , 表示字段不重复的比例 , 比例越大我们扫描的记录数越少 , 唯一键的区分度是1 , 而一些状态、性别字段可能在大数据面前区分度就是0 , 那可能有人会问 , 这个比例有什么经验值吗?使用场景不同 , 这个值也很难确定 , 一般需要join的字段我们都要求是0.1以上 , 即平均1条扫描10条记录 。
4.索引列不能参与计算 , 保持列“干净” , 比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引 , 原因很简单 , b+树中存的都是数据表中的字段值 , 但进行检索时 , 需要把所有元素都应用函数才能比较 , 显然成本太大 。所以语句应该写成create_time = unix_timestamp(’2014-05-29’) 。
5.尽量的扩展索引 , 不要新建索引 。比如表中已经有a的索引 , 现在要加(a,b)的索引 , 那么只需要修改原来的索引即可 。




推荐阅读