zoukankan      html  css  js  c++  java
  • mysql的联合索引的误解

    https://www.zhihu.com/question/36996520

    之前对于联合索引有一个误区,

    假设 name,age为一个联合索引

    5条索引记录

    a 10

    b 5

    c 12

    c 15

    d 2 

    当查找 where name='a' and age=10的时候能利用这个联合索引,为什么 where name>'a' and age=5 就只能使用到联合索引的部分索引,指第一个索引呢?

    其实还是对联合索引的性质不熟悉,网上找了资料

    mysql创建复合索引的规则是首先会对复合索引的最左边的,也就是第一个name字段的数据进行排序,在第一个字段的排序基础上(第一个字段都相同),然后再对后面第二个的cid字段进行排序。其实就相当于实现了类似 order by name cid这样一种排序规则。

    由于是name>'a' 所以使用联合索引的第一个索引, 留下记录

    b 5

    c 12

    c 15

    d 2

    针对第二列无法使用二分查找啊,

    如果是name='c' and age=15 或 name='c' and age>15 没问题 name 为12的那两行记录 是有序的

    这也就是mysql索引规则中要求复合索引要想使用第二个索引,必须先使用第一个索引的原因。(而且第一个索引必须是等值匹配)。

  • 相关阅读:
    ios开发 MJExtension
    ios开发 time profile用法
    ios开发 UIApplication
    ios AFNetWorking
    ios开发 为什么NSString、NSArray、NSDIctionary用copy修饰
    ios动画
    ios开发GCD
    重要链接
    记录,员工关心的内容。
    怎样用 Wise Installation System 制作汉化补丁?(转)
  • 原文地址:https://www.cnblogs.com/taek/p/6581602.html
Copyright © 2011-2022 走看看