面试主题
- MySQL联合索引的最左前缀原则
面试对象
- 主要面向校招生或刚工作不久的候选人
面试场景
- 面试官询问候选人关于联合索引的最左前缀原则,并要求举例说明
候选人的回答要点
- 最左前缀原则:创建联合索引后,查询时必须按照索引字段从左到右的顺序使用,否则可能无法利用索引。
- 举例说明哪些查询可以使用索引,哪些不能。
- 先导列选择:选择区分度高的列作为先导列,同时考虑查询命中率。
MySQL 8.0.13版本新特性
- 引入Skip Scan Range Access Method,允许在一定条件下不完全遵循最左前缀原则。
Skip Scan Range Access Method 示例演示
- 创建
table1表,包含id、a、b、c字段,以及idx_a_b_c联合索引。 - 填充数据,
a字段值较少,b和c字段值较多。 - 执行SQL语句测试索引使用情况。
- 使用
ANALYZE TABLE收集统计信息,更新查询优化器。 - 再次执行SQL语句,观察执行计划变化,发现使用Skip Scan Range Access Method。
Skip Scan Range Access Method 原理
- 类似穷举法,对于区分度低的字段,填充可能的值以符合最左前缀原则。
Skip Scan Range Access Method 局限性
- 必须创建联合索引。
- 必须是单表查询。
- 不能使用
DISTINCT和GROUP BY。 - 只能使用覆盖索引。
- 查询条件必须是常量。
结论
- Skip Scan Range Access Method 是在最左前缀原则基础上的优化,适用于特定场景,但有使用限制。

1708

被折叠的 条评论
为什么被折叠?



