更新时间:2025-03-13 GMT+08:00
Seq Scan
算子说明
Seq Scan算子是所有扫描算子中具有普适性的一种,这个算子本质上的原理为对表按某个方向(前向/后向)进行顺序扫描,然后返回符合筛选条件的所有行。
典型场景
- 表无索引,需要对表进行扫描操作。
- 表有索引,但需要对表大部分数据进行扫描操作。
示例
示例1:表无索引,需要对表进行扫描操作。
--数据准备。 gaussdb=# CREATE TABLE t1 (c1 number, c2 number, c3 number); CREATE TABLE gaussdb=# INSERT INTO t1 VALUES(generate_series(1,100), 2, 3); INSERT 0 100 --执行结果。 gaussdb=# EXPLAIN SELECT * FROM t1 WHERE c1 = 2; QUERY PLAN ---------------------------------------------------- Seq Scan on t1 (cost=0.00..18.10 rows=3 width=96) Filter: (c1 = 2::numeric) (2 rows) --删除表。 gaussdb=# DROP TABLE t1;
上述示例中,Seq Scan算子输出信息如表1所示。
信息名称 |
含义 |
---|---|
Seq Scan |
算子的名称。 |
Filter |
该算子的过滤谓词,示例中的过滤条件为c1列的值等于2。在查询执行时,满足这些条件的行会被包含在最终的结果集中。 |
示例2:表有索引,但需要对表大部分数据进行扫描操作。
--数据准备。 gaussdb=# CREATE TABLE t1(c1 number, c2 number, c3 number); CREATE TABLE gaussdb=# CREATE INDEX idx_c1 on t1(c1); CREATE INDEX gaussdb=# INSERT INTO t1 VALUES(generate_series(1, 100000), 2, 3); INSERT 0 100000 --执行结果。 gaussdb=# EXPLAIN SELECT * FROM t1 WHERE c1 <= 80000; QUERY PLAN -------------------------------------------------------- Seq Scan on t1 (cost=0.00..783.86 rows=9356 width=96) Filter: (c1 <= 80000::numeric) (2 rows) --删除表。 gaussdb=# DROP TABLE t1;
上述示例中,Seq Scan算子输出信息如表2所示。
父主题: 表访问方式