Allin Program

MySQL 索引

说到数据库肯定绕不开索引。

什么场景应该使用联合索引?

见过超级多的候选人不清楚这个点,甚至有些面试官对此也是理解错误。

联合索引原文Multiple-Column Indexes,有些翻译叫做复合索引或者多列索引,这里后面统称联合索引。

一般来说,其有两个优点:

  1. 节省空间;
  2. 部分场景下效率高。

综合这两个优点,很容易可以推测出常见的使用场景:假设表中有字段证件号cert_no、姓名cert_name,通过证件号查询姓名是高频请求,那么此时就建议创建联合索引(cert_no, cert_name)

下面从索引的数据结构层面解释下为什么有这两个优点。

节省空间

首先我们知道索引的数据结构是B+树,并且每个索引对应了一棵树。

引用上面的例子,创建联合索引(cert_no, cert_name)只会生成一棵索引树,所以说其节省空间。

效率高

依然是上面的例子,很明显看出在这样的场景下能减少回表次数,也就是减少了树的搜索次数,所以说其效率高。

⭐:要想使用好联合索引,还得多关注索引覆盖最左前缀原则以及MySQL 5.6引入的索引下推特性。