• mysql复合索引 基数 范围搜索中索引顺序的问题?


    作者:知乎用户
    链接:https://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)比较

    猜测肯定是前者<后者,所以联合索引把DistriTyp放左边更优

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

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

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

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

    刘 烨
    刘 德华
    刘 尔达

    张 震
    张 学友

    所以如果要建立联合索引,肯定是 key index ( 姓,名),先排姓氏,再排名字
     
     
  • 相关阅读:
    Jenkins(5)生成allure报告
    git 命令
    外连跳转微信
    微信分享接口
    微信接口
    计算php程序运行时间
    数组合并 不覆盖
    LARAVEL 分页
    laravel 随笔
    jq 监听返回事件
  • 原文地址:https://www.cnblogs.com/xiami2046/p/12825444.html
Copyright © 2020-2023  润新知