前置知识: PostgreSQL

分区裁剪与分区连接

00:00
1 min Advanced 2026/6/14

PostgreSQL分区裁剪与分区连接:运行时裁剪、分区智能连接与性能优化

1. 分区裁剪

1.1 计划时裁剪

-- WHERE 条件常量在计划时已知
EXPLAIN SELECT * FROM orders WHERE order_date = '2026-05-15';
-- 只扫描 orders_2026_q2

1.2 运行时裁剪

-- 参数化查询在执行时裁剪
PREPARE get_orders(DATE) AS
    SELECT * FROM orders WHERE order_date = $1;
EXPLAIN EXECUTE get_orders('2026-05-15');
-- Append
--   Subplans Removed: 3  -- 运行时裁剪了3个分区

2. 分区连接(Partitionwise Join)

-- 当两表都是分区表且分区策略匹配时
-- PostgreSQL 可以逐分区连接

SET enable_partitionwise_join = ON;

EXPLAIN SELECT * FROM orders o JOIN order_items oi ON o.id = oi.order_id;
-- 每对对应分区单独连接
-- 减少内存使用和计算量

3. 分区聚合

SET enable_partitionwise_aggregate = ON;

-- 逐分区聚合后合并
SELECT order_date, SUM(amount) FROM orders GROUP BY order_date;
-- 每个分区先聚合,然后合并结果

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式