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