
# 动态剪枝性能优化
#### 场景描述
当分区键带有等值查询条件时，扫描的分区数量可以裁剪到单分区中，数据库引擎可直接通过分区路由映射到目标分区获取分区信息，实现精确分区定位，提升动态剪枝的性能，从而降低扫描算子初始化的底噪。
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
动态剪枝性能优化不会在计划上体现。
#### 示例-非透明多写
```
gaussdb=# CREATE TABLE t_list
(
    c1 INT,
    c2 INT
)
PARTITION BY LIST (c1)
(
    PARTITION p0 VALUES (1,2,3),
    PARTITION p1 VALUES (4,5,6),
    PARTITION p2 VALUES (7,8,9),
    PARTITION p3 VALUES (DEFAULT)
);
-- gplan裁剪到单分区走动态剪枝性能优化。
gaussdb=# SET plan_cache_mode = 'force_generic_plan';
gaussdb=# PREPARE p1 AS SELECT /*+tablescan(t_list)*/ c2 FROM t_list WHERE c1=$1;
gaussdb=# EXPLAIN (verbose off, costs off) EXECUTE p1(1);
                                  QUERY PLAN
-------------------------------------------------------------------------------
 Data Node Scan
   Node/s: datanode1
   Node expr: $1
 Remote SQL: SELECT/*+ TableScan(t_list)*/ c2 FROM public.t_list WHERE c1 = $1
 Datanode Name: datanode1
   Partitioned Seq Scan on t_list
     Filter: (c1 = $1)
     Selected Partitions:  1
(10 rows)
gaussdb=# DROP TABLE t_list;
```
#### 注意事项及约束条件
- 仅支持分区键带等值条件，且裁剪到单分区的场景。
- 仅支持gplan使用动态剪枝，cplan不支持动态剪枝。
- 仅支持单列分区键，不支持多列分区键。
- 支持SeqScan、IndexScan、IndexonlyScan以及BitmapScan算子。
- 不支持SQLBypass场景。
- 不支持表达式分区键。
 
