SQL 分区表(Partitioned Table) 是指在逻辑上是一张完整的表,但在物理上按照某种规则把数据拆分存储到多个“分区”中的表。
简单来说:
分区表 = 一张表的外表 + 多块物理存储(分区)
当表的数据量非常大时(如千万、上亿行),直接操作整张表会:
分区表的好处:
不同数据库支持略有差异,但思想类似。
按范围划分,最常用(如按时间)
-- 示例(PostgreSQL / Oracle 思路)
PARTITION BY RANGE (create_date)
例如:
按固定值划分
PARTITION BY LIST (region)
例如:
按哈希值分散数据
PARTITION BY HASH (user_id)
适合均匀分散数据
多种方式组合
例如:先按年 Range,再按地区 List
CREATE TABLE orders (
id INT,
order_date DATE,
amount NUMERIC
) PARTITION BY RANGE (order_date);
CREATE TABLE orders_2023 PARTITION OF orders
FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
CREATE TABLE orders_2024 PARTITION OF orders
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
查询时:
SELECT * FROM orders WHERE order_date = '2024-03-01';
数据库只扫描 orders_2024 分区
| 对比项 | 分区表 | 手动分表 |
|---|---|---|
| 使用方式 | 像一张表 | 多张表 |
| SQL 透明度 | 高 | 低 |
| 管理复杂度 | 低 | 高 |
| 跨表查询 | 自动 | 需手动 |
✅ 日志表
✅ 订单表
✅ 流水表
✅ 历史数据表
❌ 小表(没必要)
如果你用的是 MySQL / Oracle / PostgreSQL,我可以给你对应数据库的具体写法和示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。