不确定答案:表tb1的主键是(c1,c2),查询语句"SELECT COUNT(*) FROM tb1 where c1=? and c2=? and c3>?"使用主键访问的执行计划会是:

表tb1的主键是(c1,c2),查询语句"SELECT COUNT(*) FROM tb1 where c1=? and c2=? and c3>?"使用主键访问的执行计划会是:

A. TABLE GET

B. TABLE RANGE SCAN

C. TABLE FULL SCAN

D. TABLE SKIP SCAN

A TABLE GET :x: 错误 TABLE GET 通过主键精确匹配,返回 0 行或 1 行数据。虽然查询使用了主键前缀,但 c3>? 是范围条件,会返回多行,因此不符合 TABLE GET 的使用场景。
B TABLE RANGE SCAN :white_check_mark: 正确 TABLE RANGE SCAN 通过主键进行范围扫描 ,返回 0 行或多行数据。该查询的主键是 (c1,c2) ,前两个条件是等值匹配 c1=? and c2=? ,可以精确定位到索引的起始位置;第三个条件 c3>? 是范围条件,可以在主键索引的有序结构中高效地扫描满足条件的数据行。
C TABLE FULL SCAN :x: 错误 TABLE FULL SCAN 会扫描整张表的所有数据,通常在无可用索引或优化器认为代价更低时使用。此查询有主键索引可用,且可通过主键前缀精确定位扫描范围,优化器不会选择全表扫描
D TABLE SKIP SCAN :x: 错误 TABLE SKIP SCAN(索引跳跃扫描)在查询条件跳过 了联合索引的前缀列时使用。此查询使用了主键的前两列 (c1, c2) 作为等值条件,没有跳过前缀列 ,因此不会使用跳跃扫描。

1 个赞