美文网首页
一次mysql联合索引的面试题

一次mysql联合索引的面试题

作者: 提米锅锅 | 来源:发表于2019-11-16 22:20 被阅读0次

    mysql联合索引是经常被碰到的问题,上周面试了一个牛逼的国际旅游公司就被问到了,之前觉得好理解,没想到追问之下也是破绽百出,我还原下当时的场景。

    说说mysql的联合索引,如果a b c建立联合索引,搜ac和bc会用到吗?
    :不会,联合索引本质是建立a,ab abc 3个索引,遵循最左匹配原则,这个过了。

    联合索引的好处?
    我举了个排序的例子,如果搜索ab,联合索引按ab排序,所以可以省掉排序的操作,提供性能
    我想这个也能过,结果面试官追问。。

    如果不考虑排序,有2个单独的索引a和b,查两次不是一样么,会慢吗?
    我这里被挖坑了,正确答案是mysq分析器一次只会选一个索引,不会选两个,所以这种场景搜索两个字段用联合索引肯定比单个所以快。

    后来查了资料,mysql新版本也支持索引合并,也就是可以同时查2个单独的索引a和b,这里我们比较下和联合索引查找的区别:
    两个单独的索引a和b,假设要找a=100,b=200的数据,索引a只能找出a=100的记录,可能里面有大部分b不是200,那么还是会读取过多的记录,然后利用b索引的结果取过滤。

    联合索引a和b都已经在索引树了,所以匹配直接在索引上就可以完成,最终只会去读复合条件的记录,减小了io时间。

    这篇文章的一句描述不错,可以帮你理解聚合索引的本质(https://www.cnblogs.com/leader007/p/10524265.html)

    利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。

    相关文章

      网友评论

          本文标题:一次mysql联合索引的面试题

          本文链接:https://www.haomeiwen.com/subject/rfduictx.html