更新时间: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场景。
  • 不支持表达式分区键。

相关文档