
上面的操作算子,为什么是table full scan,而不是 TABLE RANGE SCAN 呢?

上面的操作算子,为什么是table full scan,而不是 TABLE RANGE SCAN 呢?
根据您提供的信息,您的 SQL 语句是 explain select * from t1 order by c1;,并且执行计划显示为 TABLE FULL SCAN。下面是关于为什么在这个场景下使用了全表扫描而不是范围扫描的详细解释。
TABLE FULL SCAN 而不是 TABLE RANGE SCAN?ORDER BY c1 子句。这要求数据库按照 c1 列的值对结果进行排序。c1 是主键,数据库仍然需要读取所有的行并进行排序。在这种情况下,直接进行全表扫描可能是更高效的选择,因为可以一次性读取所有数据并进行排序,而不是通过索引进行范围扫描后再进行排序。c1 排序存储(如 B-Tree 索引),那么全表扫描后进行排序可能会更高效。| 1D OPERATOR [NAME | EST. ROWS | EST. TIME (us) |
JO |TABLE FULL SCAN|t1 比 13 1
outputs & filters
0 - output([t1.ci], [ti.c2], [tt.c3], [t1.c4]}, Filter(nil), rowser=16
access([ti.c1], [t1.c2], [tt.c3], [t1.c4]), partitions (po)
is_index_back=false, is_global 园 id
range_key([ti.cl]), range(MIN } MAX)always ‘true
range_key([ti.cl]), range(MIN ; MAX) always true 表示范围是从最小值到最大值,即全表扫描。ORDER BY 操作的存在,数据库选择了 TABLE FULL SCAN 来确保所有数据都被读取并进行排序。如果您有更多具体的性能调优需求或问题,请提供更多上下文信息,以便进一步分析和建议。
更多信息请查看:
在 OceanBase 中,全表扫描(TABLE FULL SCAN)并不一定按照主键值的大小顺序从小到大读取数据。全表扫描通常会扫描整个表的所有行,而不考虑主键的顺序。具体来说:
全表扫描的特点:
主键顺序与全表扫描的关系:
排序操作的影响:
ORDER BY 子句中指定排序列。例如,您的查询 SELECT * FROM t1 ORDER BY c1; 会先进行全表扫描,然后再对结果进行排序。总结起来,在 OceanBase 中,全表扫描并不保证按照主键值的大小从小到大读取数据。如果您需要按主键顺序获取数据,可以使用 ORDER BY 子句来确保结果是有序的。
如果您的查询确实需要按主键顺序读取数据,并且性能是一个重要考虑因素,建议使用覆盖索引或优化查询以减少不必要的全表扫描。希望这能解答您的疑问。
检索到的文档如下:
在 OceanBase 中,全表扫描(TABLE FULL SCAN)和全主键扫描(FULL PRIMARY KEY SCAN)是两种不同的操作,它们在执行方式和性能上有一些区别。下面详细解释这两种扫描的区别以及全主键扫描时的操作算子。
定义:
特点:
操作算子:
TABLE FULL SCAN。定义:
特点:
操作算子:
INDEX RANGE SCAN 或 INDEX FAST FULL SCAN,具体取决于优化器的选择。扫描方式:
性能:
适用场景:
假设我们有一个表 t1,其结构如下:
CREATE TABLE t1 (
c1 INT PRIMARY KEY,
c2 INT,
c3 INT
);
EXPLAIN SELECT * FROM t1;
执行计划可能显示为:
|ID|OPERATOR |NAME|EST. ROWS|COST|
-----------------------------------------
|0 |TABLE FULL SCAN |t1 |100 |100 |
EXPLAIN SELECT * FROM t1 ORDER BY c1;
执行计划可能显示为:
|ID|OPERATOR |NAME|EST. ROWS|COST|
-----------------------------------------
|0 |INDEX RANGE SCAN|t1 |100 |50 |
TABLE FULL SCAN。INDEX RANGE SCAN 或 INDEX FAST FULL SCAN。希望这能解答您的疑问。如果您有更多问题,请随时提问。
检索到的文档如下:
本来就是查所有数据
优化器的选择。 可以加上hint,对比一下。hint参考:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686951#5-title-INDEX%20Hint
学习
select * 肯定是要回表,而且没有where条件