更新时间:2026-07-28 GMT+08:00
动态剪枝性能优化
场景描述
当分区键带有等值查询条件时,扫描的分区数量可以裁剪到单分区中,数据库引擎可直接通过分区路由映射到目标分区获取分区信息,实现精确分区定位,提升动态剪枝的性能,从而降低扫描算子初始化的底噪。
动态剪枝性能优化不会在计划上体现。
示例-非透明多写
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场景。
- 不支持表达式分区键。
父主题: 分区算子执行优化