
# 分区导入数据性能优化
#### 场景描述
当向分区表插入数据的时候，如果插入的数据为常量/参数/表达式等简单类型，会自动对INSERT算子进行执行优化（FastPath）。可以通过执行计划来判断是否触发了执行优化，触发执行优化时Insert计划前会带有FastPath关键字。
#### 示例
```
gaussdb=# CREATE TABLE fastpath_t1
(
    col1 INT,
    col2 TEXT
) 
PARTITION BY RANGE(col1)
(
    PARTITION p1 VALUES LESS THAN(10),
    PARTITION p2 VALUES LESS THAN(MAXVALUE)
);
--INSERT常量，执行FastPath优化
gaussdb=# EXPLAIN INSERT INTO fastpath_t1 VALUES (0, 'test_insert');
                            QUERY PLAN                            
------------------------------------------------------------------
 [Parameterized]
 FastPath Insert on fastpath_t1  (cost=0.00..0.01 rows=1 width=0)
   ->  Result  (cost=0.00..0.01 rows=1 width=0)
(3 rows)
--INSERT带参数/简单表达式，执行FastPath优化
gaussdb=# PREPARE insert_t1 AS INSERT INTO fastpath_t1 VALUES($1 + 1 + $2, $2);
PREPARE
gaussdb=# EXPLAIN EXECUTE insert_t1(10, '0');
                            QUERY PLAN                            
------------------------------------------------------------------
 FastPath Insert on fastpath_t1  (cost=0.00..0.02 rows=1 width=0)
   ->  Result  (cost=0.00..0.02 rows=1 width=0)
(2 rows)
--INSERT为子查询，无法执行FastPath优化，走标准执行器模块
gaussdb=# CREATE TABLE test_1(col1 int, col3 text);
gaussdb=# EXPLAIN INSERT INTO fastpath_t1 SELECT * FROM test_1;
                           QUERY PLAN                            
-----------------------------------------------------------------
 [Parameterized] 
 Insert on fastpath_t1  (cost=0.00..22.38 rows=1238 width=36)
   ->  Seq Scan on test_1  (cost=0.00..22.38 rows=1238 width=36)
(3 rows)
gaussdb=# DROP TABLE fastpath_t1;
gaussdb=# DROP TABLE test_1;
```
#### 注意事项及约束条件
- 只支持INSERT VALUES语句下的执行优化，且VALUES子句后的数据为常量/参数/表达式等类型。
- 不支持触发器。
- 不支持UPSERT语句的执行优化。
- 在CPU为资源瓶颈时能获得较好的提升。
 
