PG分区表实战与优化
学会使用PostgreSQL分区表提升大数据量查询性能 · 难度:入门 · +15XP
分区表概念
分区表是将一张大表拆分为多个物理子表(分区)的技术。PostgreSQL支持范围分区、列表分区和哈希分区。
创建分区表
CREATE TABLE sales (
id SERIAL,
sale_date DATE NOT NULL,
amount NUMERIC
) PARTITION BY RANGE (sale_date);
CREATE TABLE sales_2024_q1 PARTITION OF sales
FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE sales_2024_q2 PARTITION OF sales
FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');
插入与查询
数据会自动路由到对应分区:
INSERT INTO sales (sale_date, amount) VALUES ('2024-02-15', 100);
INSERT INTO sales (sale_date, amount) VALUES ('2024-05-20', 200);
-- 查询会自动只扫描相关分区
EXPLAIN SELECT * FROM sales WHERE sale_date = '2024-02-15';
分区优势
| 优势 | 说明 |
|---|---|
| 查询性能提升 | 分区裁剪减少扫描数据量 |
| 管理便捷 | 可独立操作分区,如删除旧分区 |
| 维护灵活 | 分开执行VACUUM、索引重建 |
练习提示
尝试创建一个按月份分区的订单表,并插入不同月份的数据,使用EXPLAIN验证分区裁剪效果。