constraint_exclusion
英文手册覆盖始于 PostgreSQL 7.4. 来源历史与运行验证各自保留独立版本边界。
当前阅读 PG 18·选择有来源记录的版本
- boot val
- partition
- category
- Query Tuning / Other Planner Options
- context
- user
- documented
- true
- enumvals
- partition, on, off
- extra desc
- Table scans will be skipped if their constraints guarantee that no rows match the query.
- lang
- en
- max val
- 未知
- metadata version
- 18
- min val
- 未知
- name
- constraint_exclusion
- short desc
- Enables the planner to use constraints to optimize queries.
- source
- pg-settings-source-snapshot
- unit
- 未知
- vartype
- enum
版本定义 PG 18
控制查询规划器对表约束的使用,以优化查询。constraint_exclusion的允许值是on(对所有表检查约束)、off(从不检查约束)和partition(只对继承的子表和UNION ALL子查询检查约束)。partition是默认设置。它通常与传统的继承树一起使用来提高性能。
当此参数允许对某个表使用约束排除时,规划器会比较查询条件与该表的CHECK约束,并且忽略那些条件违反约束的表扫描。例如:
CREATE TABLE parent(key integer, ...); CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent); CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent); ... SELECT * FROM parent WHERE key = 2400;
在启用约束排除时,这个SELECT将完全不会扫描child1000,从而提高性能。
目前,约束排除仅在通常用于通过继承树实现表分区的情况下默认启用。为所有表启用它会增加额外的规划开销,这在简单查询上相当明显,而且通常不会为简单查询带来好处。如果没有通过传统继承方式进行分区的表,你可能希望完全关闭它。(注意,分区表的等效功能由另一个参数enable_partition_pruning控制。)
更多关于使用约束排除实现分区的信息请参阅第 5.12.5 节。
比较版本
来源引用
定义来源
center · PostgreSQL 18 · english-manuals:2bf8a74bf8b745bad29c5639a2cbe312a76e4c0d9c5164d6288877673ea61bd9
正文语言: zh-Hans · 2026-09-11@29c86d9