mysql索引离散程度_为什么离散程度高的放前面呢?

作者:Lawrence.li

链接:http://www.zhihu.com/question/31109426/answer/66326216

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

这里涉及两个知识点:最左前缀left-prefix,列基数cardinality

最左前缀,可以理解为在复合索引中,越是左边越好

因为分别对A,B,C三个列建联合索引index,实际上是建立3个索引,每个索引都包含A

A,B,C

A,B

A

列基数,是指它所容纳的所有非重复值的个数,可以理解为  distinct(某列)后的结果

比如某个列包含值1,3,7,4,7,3,那么它的基数就是4了

列基数越大,重复值越少,需要建索引,因为如果某列的值都是重复的就没必要建索引了

是(`DistriType`,`DistriButTime`) 这样建?还是这样建 (`DistriButTime`,`DistriType`) ?

count一下就知道了

count(distinct DistriType)  与 count(distinct DistriButTime)比较

猜测肯定是前者

再举一个例子,一本字典,记录了所有的姓名

分别用两个字段,第一列:姓    第二列:名

很明显 count(distinct 姓) 要比 count(distinct 名) 要少

因为百家姓,姓氏只有一百个,而名字可以自由组合很多个

刘    烨

刘    德华

刘    尔达

张    震

张    学友

所以如果要建立联合索引,肯定是   key index ( 姓,名),先排姓氏,再排名字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值