更新时间:2025-05-29 GMT+08:00

Seq Scan

算子说明

Seq Scan算子是所有扫描算子中具有普适性的一种,这个算子本质上的原理为对表按某个方向(前向/后向)进行顺序扫描,然后返回符合筛选条件的所有行。

典型场景

  • 表无索引,需要对表进行扫描操作。
  • 表有索引,但需要对表大部分数据进行扫描操作。

示例

示例1:表无索引,需要对表进行扫描操作。本示例在normal模式下的场景如下,并且本节后续计划都采用normal模式进行展示。

gaussdb=# SET explain_perf_mode = normal; 
SET

--数据准备。 
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)
(2 rows)

--删除表。
gaussdb=# DROP TABLE t1;

上述示例中,Seq Scan算子输出信息如表1所示。

表1 Seq Scan算子输出信息

信息名称

含义

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) 
(2 rows)

--删除表。
gaussdb=# DROP TABLE t1;

上述示例中,Seq Scan算子输出信息如表2所示。

表2 Seq Scan算子输出信息

信息名称

含义

Seq Scan

算子的名称。

Filter

该算子的过滤谓词,示例中的过滤条件为c1列的值小于等于80000。在查询执行时,满足这些条件的行会被包含在最终的结果集中。