表 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(索引跳跃扫描):
- 将索引按首列
c1的不同取值拆分为多个逻辑子索引。 - 对每个子索引,在
c2、c3上执行范围扫描,跳跃过c1未匹配的部分。 - 最终合并所有子索引的结果,完成查询。
我也觉得选C