表tb1上有索引i1(c1,c2,c3),则以下查询语句使用索引i1扫描时的扫描范围是:SELECT 1 FROM tb1 WHERE C1>? AND C2>? AND c3=?;

选D
对于联合索引 i1(c1, c2, c3) ,B+树的数据是按照 c1 → c2 → c3 的顺序依次排序存储的。

我们来分析一下查询条件 WHERE C1>? AND C2>? AND c3=? :

  1. C1>?(范围查询) :因为 C1 是索引的第一列,数据库可以直接定位到满足 C1>? 的起始位置。

  2. C2>?(范围查询) :在 C1 确定的前提下,数据会按照 C2 排序。但由于 C1 本身是一个范围(而不是一个固定的值),数据库无法在跨越多个 C1 值的情况下,继续利用索引有序性去过滤 C2 的范围。因此,索引的扫描到这里就“断”了,C2 的条件只能在扫描出 C1 的结果后进行过滤。

  3. c3=?(等值查询) :同理,由于前面的 C2 已经使用了范围查询,破坏了索引的连续性,c3 也无法使用索引进行查找或排序。

因此,这个查询在使用索引 i1 时,实际能利用到的扫描范围 仅仅只有第一列的范围条件。

1 个赞