表 tb1 仅有索引 ix1(c1,c2,c3),查询语句为:

表 tb1 仅有索引 ix1(c1,c2,c3),查询语句为:
SELECT COUNT(*) FROM tb1 WHERE c2=? AND c3=?
使用 ix1 访问的执行计划会是?
​​A. TABLE FULL SCAN​​
​​B. TABLE RANGE SCAN​​
​​C. TABLE SKIP SCAN​​
​​D. TABLE GET​

1 个赞

选择C

  • 索引 ix1(c1,c2,c3)联合索引,遵循最左前缀匹配原则
  • 查询条件 WHERE c2=? AND c3=? 未包含索引首列 c1,无法直接走常规的索引范围扫描。
  • 此时数据库会采用 INDEX SKIP SCAN(索引跳跃扫描)
  1. 将索引按首列 c1 的不同取值拆分为多个逻辑子索引。
  2. 对每个子索引,在 c2c3 上执行范围扫描,跳跃过 c1 未匹配的部分。
  3. 最终合并所有子索引的结果,完成查询。

我也觉得选C