面试官:联合索引用不用遵循最左前缀原则?

面试主题

  • MySQL联合索引的最左前缀原则

面试对象

  • 主要面向校招生或刚工作不久的候选人

面试场景

  • 面试官询问候选人关于联合索引的最左前缀原则,并要求举例说明

候选人的回答要点

  1. 最左前缀原则:创建联合索引后,查询时必须按照索引字段从左到右的顺序使用,否则可能无法利用索引。
  2. 举例说明哪些查询可以使用索引,哪些不能。
  3. 先导列选择:选择区分度高的列作为先导列,同时考虑查询命中率。

MySQL 8.0.13版本新特性

  • 引入Skip Scan Range Access Method,允许在一定条件下不完全遵循最左前缀原则。

Skip Scan Range Access Method 示例演示

  1. 创建table1表,包含idabc字段,以及idx_a_b_c联合索引。
  2. 填充数据,a字段值较少,bc字段值较多。
  3. 执行SQL语句测试索引使用情况。
  4. 使用ANALYZE TABLE收集统计信息,更新查询优化器。
  5. 再次执行SQL语句,观察执行计划变化,发现使用Skip Scan Range Access Method。

Skip Scan Range Access Method 原理

  • 类似穷举法,对于区分度低的字段,填充可能的值以符合最左前缀原则。

Skip Scan Range Access Method 局限性

  1. 必须创建联合索引。
  2. 必须是单表查询。
  3. 不能使用DISTINCTGROUP BY
  4. 只能使用覆盖索引。
  5. 查询条件必须是常量。

结论

  • Skip Scan Range Access Method 是在最左前缀原则基础上的优化,适用于特定场景,但有使用限制。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值