postgre分区方式

主要有 3 种:RANGE、LIST、HASH。

分区方式 中文 按什么分 典型场景
RANGE 范围分区 数值/日期范围 时间、订单、日志
LIST 列表分区 指定的离散值 国家、地区、业务类型
HASH 哈希分区 哈希计算结果 数据均匀拆分

1. RANGE 范围分区

按照一个连续的范围来分。

比如按照订单日期:

yaml 复制代码
orders
│
├── 1月分区:2026-01-01 ~ 2026-02-01
├── 2月分区:2026-02-01 ~ 2026-03-01
└── 3月分区:2026-03-01 ~ 2026-04-01

创建方式:

sql 复制代码
CREATE TABLE orders (
    id bigint,
    order_date date
) PARTITION BY RANGE (order_date);

例如:

sql 复制代码
CREATE TABLE orders_2026_01
PARTITION OF orders
FOR VALUES FROM ('2026-01-01') TO ('2026-02-01');

也就是:

RANGE = 按区间分。

你资料中的 measurement 就是按照 logdate 做 RANGE 分区。

它特别适合时间数据,比如日志、订单、流水。


2. LIST 列表分区

按照明确指定的几个值来分。

例如有:

ini 复制代码
用户表 users

country = 'CN'
country = 'JP'
country = 'US'

可以:

bash 复制代码
users
│
├── users_asia_1 → CN
├── users_asia_2 → JP
└── users_us     → US

本质就是:

markdown 复制代码
这个值属于哪个列表
        ↓
数据就进入哪个分区

所以:

LIST = 按具体值分类。

例如国家、地区、部门、业务类型等离散值比较适合。资料的定义也是通过显式列出每个分区中允许出现的键值来划分。


3. HASH 哈希分区

HASH 不需要人为规定:

css 复制代码
1月 → A
2月 → B

而是数据库通过计算,把数据分散到几个分区。

例如:

复制代码
user_id
   ↓
HASH计算
   ↓
除以4取余数
   ↓
┌────┬────┬────┬────┐
0    1    2    3
↓    ↓    ↓    ↓
P0   P1   P2   P3

比如:

ini 复制代码
user_id = 1001 → P1
user_id = 1002 → P2
user_id = 1003 → P3
user_id = 1004 → P0

它的重点是:

HASH = 不关心业务范围,主要希望把数据比较均匀地分散到多个分区。

资料中描述为给每个分区指定模数和余数,根据计算结果决定数据属于哪个分区。


三种方式怎么记?

直接记这三个例子:

sql 复制代码
RANGE(范围)
按照时间:
1月 | 2月 | 3月 | 4月

LIST(列表)
按照类别:
中国 | 日本 | 美国

HASH(哈希)
按照计算:
P0 | P1 | P2 | P3

所以选择的时候可以简单判断:

有明显的连续范围 → RANGE;有明确的类别 → LIST;没有明显分类、只是希望数据均匀拆开 → HASH。

另外,资料还提到了子分区 :一个分区本身还可以继续成为分区表,例如先按月份 RANGE 分,再在每个月内部继续分。

相关推荐
码事漫谈3 小时前
骂AI,会让它做得更好吗?
后端
陈随易4 小时前
bm2,Node.js 与 Bun 项目部署新选择
前端·后端·程序员
架构技术专栏5 小时前
AI Agent 框架怎么选:从一次制度查询拆出技术边界
后端·面试
明月_清风7 小时前
SaaS 的三层挣钱逻辑,正在被 AI 从第一层击穿
人工智能·后端
谁在黄金彼岸8 小时前
nginx服务化五套方案原理解剖与选型
后端
谁在黄金彼岸9 小时前
WinSW在Win7上失败真相-实测与修复
后端
花间相见9 小时前
【后端开发|Redis进阶01】—— Redis分布式锁全解:从SETNX到Redisson看门狗,再到RedLock
后端·面试
llqbzllll9 小时前
A2A 1.0 到底和 MCP 差在哪:从 Agent Card、Task 到 Java 最小互操作
后端
花间相见9 小时前
【后端开发|JVM基础01】—— Java垃圾回收全解:从分代内存模型到各收集器的分代职责
后端
geovindu9 小时前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式