
# 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]所示。
 表1Seq 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]所示。
 表2Seq Scan算子输出信息 
| 信息名称     | 含义                                                            |
|:---|:---|
| Seq Scan | 算子的名称。                                                        |
| Filter   | 该算子的过滤谓词，示例中的过滤条件为c1列的值小于等于80000。在查询执行时，满足这些条件的行会被包含在最终的结果集中。 |
   
