lang
lang/sql/select/partition-required.md
medium
sql-partition-required
大表 SELECT 必带分区字段(按数据规模启用,默认预留)。Use when 写 SQL / 迁移脚本 / 评审涉及 `partition-required` 的 PR。
partition分区big table
paths
**/migrations/**/*.py**/*.sql
SQL · 大表必带分区字段
状态
数据规模未到必须分区表的程度(articles / documents / orders 等表行数 < 10M)时本规则为未来扩展预留。
规则(达到规模后启用)
对分区表的 SELECT 必须在 WHERE 含分区键,否则触发全分区扫描。
示例分区表
例如 request_logs(按 partition_dt 月分区):
-- ❌ 全分区扫描(扫所有月份)
SELECT count(*) FROM request_logs WHERE user_id = 123;
-- ✅ 限定分区
SELECT count(*) FROM request_logs
WHERE partition_dt BETWEEN '20260501' AND '20260524'
AND user_id = 123;
命名约定
分区字段统一 partition_dt 列,类型 VARCHAR(8) 存 yyyyMMdd。
何时引入分区
| 表 | 触发阈值 |
|---|---|
request_logs |
总行数 > 5M 或 单月 > 1M |
events |
单月 > 100K |
files |
总行数 > 10M |
引入后这条规则升级为 hook 强制校验。
自检(当前阶段)
- [ ] 关心的查询是否在已分区表上?
- [ ] 如是,WHERE 是否含
partition_dt?