Skip to content

面试速答(先看这里)

**一句话结论:**虽然联合索引能带来很多好处,一方面当涉及到多个索引列的查询时,联合索引可以更快的定位到符合条件的数据行。

60秒标准回答:

联合索引是数据库中的一种索引类型,它由多个列组成,这些列按照指定的顺序组合在一起,以加速数据库查询操作。如(a,b),表示字段a和字段b组成一个联合索引

关于联合索引及最左前缀匹配可以看下这篇

虽然联合索引能带来很多好处,一方面当涉及到多个索引列的查询时,联合索引可以更快的定位到符合条件的数据行。另外,联合索引可以实现索引覆盖,当索引中包含了本次要查询的所有列时,可以通过索引覆盖直接返回而不需要回表

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**联合索引是数据库中的一种索引类型,它由多个列组成,这些列按照指定的顺序组合在一起,以加速数据库查询操作。
  • **要点2:**关于联合索引及最左前缀匹配可以看下这篇:
  • **要点3:**但是,并不是说越多越好的,因为索引的创建和维护也是有很多成本和开销的。
  • **要点4:**首先,每个索引都需要 占用存储空间 。
  • **要点5:**其次,每次对表进行插入、更新或删除操作时,相关的 索引都需要进行维护 。

**记忆锚点:**联合索引 → 方面当涉及到多个索引 → 来创建合适的联合索引 → 创建太多的联合索引 → 组成一个联合索引 → 占用存储空间

加分表达:

  • 另外,联合索引可以实现索引覆盖,当索引中包含了本次要查询的所有列时,可以通过索引覆盖直接返回而不需要回表。
  • 如果有太多的联合索引,这可能会增加写入操作的成本。

追问准备:

  • 围绕「联合索引」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「方面当涉及到多个索引」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「来创建合适的联合索引」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

肯定不是的。

联合索引是数据库中的一种索引类型,它由多个列组成,这些列按照指定的顺序组合在一起,以加速数据库查询操作。如(a,b),表示字段a和字段b组成一个联合索引。

关于联合索引及最左前缀匹配可以看下这篇:

📄 ✅什么是最左前缀匹配?为什么要遵守?

打开文档:✅什么是最左前缀匹配?为什么要遵守?

虽然联合索引能带来很多好处,一方面当涉及到多个索引列的查询时,联合索引可以更快的定位到符合条件的数据行。另外,联合索引可以实现索引覆盖,当索引中包含了本次要查询的所有列时,可以通过索引覆盖直接返回而不需要回表。

但是,并不是说越多越好的,因为索引的创建和维护也是有很多成本和开销的。

首先,每个索引都需要占用存储空间。创建太多的联合索引可能会增加数据库的存储需求。

其次,每次对表进行插入、更新或删除操作时,相关的索引都需要进行维护。如果有太多的联合索引,这可能会增加写入操作的成本。

索引的维护会带来额外的一些页分裂、页合并等操作,会让整个过程效率更加低。

📄 ✅什么是InnoDB的页分裂和页合并

打开文档:✅什么是InnoDB的页分裂和页合并

所以,联合索引并不是越多越好的。而是根据实际的查询条件、使用频率、字段区分度等情况,来创建合适的联合索引。