更新时间:2026-07-28 GMT+08:00
分享

分区剪枝

分区剪枝是GaussDB提供的一种分区表查询的优化技术,数据库SQL引擎会根据查询条件,只扫描特定的部分分区。该优化动作自动触发,当分区表的查询条件契合剪枝场景时,分区剪枝便会自行启动。

依据剪枝所处阶段的差异,分区剪枝可划分为静态剪枝与动态剪枝两类:

  • 静态剪枝发生于优化器阶段,在生成执行计划前,数据库已掌握需访问的分区信息;
  • 动态剪枝则在执行器阶段(执行开始或执行过程中)实施,于生成计划时,数据库尚未明确需访问的分区信息,仅判定 “具备分区剪枝条件”,具体的剪枝细节由执行器确定。
分区剪枝支持范围如下:
  • 支持分区级别:一级分区、二级分区。
  • 支持分区类型:全部分区类型,包括范围分区、哈希分区、列表分区。
  • 支持表达式类型:比较表达式(<,<=,=,>=,>)、逻辑表达式、数组表达式。对于哈希分区、列表分区,比较表达式只有是等值(=)情况下,才能进行分区剪枝。
  • 支持条件类型:常量、参数、函数,函数需要为immutable函数和stable函数(参数化路径剪枝不支持stable函数),不支持子查询等复杂条件。
  • 分区键类型和条件类型不同触发类型转换场景,需要保证类型可以相互转换。

需注意的是,只有分区表页面扫描和Local索引扫描才会触发分区剪枝,Global索引没有分区的概念,不需要进行剪枝。对于Global索引,会根据索引条件决定去访问哪些分区。所以总体上建议:查询带有分区键的条件时推荐使用Local索引,查询不带分区键的条件时推荐使用Global索引,但Global索引在分区维护操作上会有额外的开销。可以通过创建索引时显式申明GLOBAL/LOCAL关键字来控制索引创建类型。

相关文档