VP导航 VP导航
首页 提交网址

资讯文章 资讯 · NEWS

表涨到几百万行之后:分区、归档,和那些越跑越慢的查询

2026-10-24 约 1,459 字 预计阅读 4 分钟 yiyunkj

表涨到几百万行之后:分区、归档,和那些越跑越慢的查询 表

分区不是一个加速按钮。它解决的是另外三件事:历史数据能整块退场、查询能只扫相关分片、表太大时的维护操作不再动辄全表。如果你的问题只是某个查询慢,先去优化索引和 SQL,分区解决不了扫描了不该扫的东西。

表分区规则、归档策略与查询代价对照

图片来源:网络,版权归原作者所有,侵权请联系删除

先看哪些表值得动

代表表增长方式特点
抓取日志每天数千至数万几乎只按时间查
出站点击流水随流量线涨按时间与条目查
条目变更历史随编辑量增长回看为主
条目主表缓慢通常不该分区

判断口径很简单:这张表的主查询条件是不是稳定地落在某一个维度上(通常是时间)。是,分区有用;不是,分区只增加运维复杂度。

MySQL 那条绕不过去的规则

MySQL 的要求写得很硬:表上的每个唯一键,包括主键,都必须包含分区表达式用到的所有列。这不是文档笔误,原因是分区表的索引都是每个分区本地的,本地索引只能在自己分区内保证唯一,跨分区重复谁也看不见。

因此按 created_at 做范围分区,就意味着 created_at 必须进主键。后果比想象中大:主键从 (id) 变成 (id, created_at),所有外键引用、下游同步逻辑、ORM 映射都要跟着改。

还有一条常被遗忘的硬约束:分区的 InnoDB 表不能有外键,既不能引用别人,也不能被别人引用。这基本决定了 MySQL 里分区只适合那种「和主模型关系简单」的事实流水表。

作为补偿,换来的是删除的速度:按月的 RANGE 分区,退掉一个月就是一条 DROP PARTITION,几乎瞬间完成;换成 DELETE 删几百万行,要写 undo、要 purge、还要留下一堆碎片。

PostgreSQL 这边

PostgreSQL 的声明式分区从 10 起支持,规则同源但表述略不同:唯一约束或主键必须包含所有分区键列,且分区键里不能有表达式或函数调用。

外键的处境比 MySQL 宽松得多:11 起分区表可以引用别的表,12 起可以被别的表引用。也就是说 PostgreSQL 里「分区 + 参照完整」是可以共存的。

另外它的分区就是普通表,可以单独建索引、单独设 autovacuum 参数,还能 ATTACH / DETACH 做生命周期管理。归档时把某个月份 DETACH 出来单独处置,比删数据温和得多。

三种真实退化

条件没命中分区键

比如按 item_id 查,而表是按 created_at 分区的。这时规划器要挨个分区走本地索引再合并结果,成本和一张大表没什么两样——不算变慢,但你期待的分片收益一分钱都拿不到。

分区键选错导致倾斜

某个促销月、某个热点事件的分区远大于其他分区,IO、锁、vacuum 压力全都集中过去,等于把原来的热点缩小了一圈继续存在。定期检查各分区的实际行数。

分区数失控

按天分区留三年就是一千多个分区,DDL、规划时间、打开文件数都会受影响。大多数业务按月已经够用。

如果还不到分区的时候

三件事做了往往就不必分区:

第一,冷热分离。把超过某个时间的数据搬到同结构的归档表(或另一套存储),主表保持在可控体量。这一步的收益和分区接近,代价小得多。

第二,专业化组合索引。时间范围查询要配上匹配实际排序列的联合索引,比分区更能直接减少扫描。

第三,别查总数。列表页那个「共 N 条」往往是慢查询第一名,改成估算或从计数表读。

真要分区,先把维护自动化

提前创建未来分区、到期自动 DETACH 或 DROP,这两件事必须一开始就有脚本。手工创建分区的业务,最终都会在某个月初因为没人执行而出错。

最后别忘了上线前必须过的三件事:新分区的生成任务有告警;跨分区查询在预发环境已经跑过一遍执行计划;以及备份恢复流程确认过「分区表的恢复」能真的恢复到可用状态。

本文标签 表分区 数据归档 大表查询优化
← 上一篇 两个人同时改一条条目:事务隔离级别、乐观锁,和目录站 下一篇 → Redis 里的 big key 和热 key:目录

— 本文完 —

提交网址

发现好站,欢迎自荐收录

站内搜索

站点统计

  • 今日审核0
  • 已收录站点3744
  • 正常访问3738
  • 失联站点6
  • 累计访问175

网站分类

  • AI工具 0
    AI对话0 AI绘画0 AI写作0 AI编程0 AI音视频0 AI办公效率0
  • 开发编程 0
    前端开发0 后端开发0 移动开发0 开源与代码托管0 数据库0 开发文档与教程0
  • 设计素材 0
    UI设计0 图标素材0 免费图库0 字体下载0 配色工具0 设计模板0
  • 站长工具 0
    网站统计0 SEO工具0 域名与主机0 收录提交0 建站程序0 运维监控0
  • 学习教育 0
    编程教程0 语言学习0 职业技能0 公开课与慕课0 考试题库0 中小学教育0
  • 生活服务 0
    交通出行0 外卖点餐0 房产租房0 医疗健康0 政务办事0 快递物流0
  • 影音娱乐 0
    影视观看0 音乐音频0 游戏资源0 短视频直播0 小说阅读0
  • 电商购物 0
    综合商城0 比价工具0 导购返利0 二手交易0 团购优惠0
  • 综合其他 1
    实用工具0 资源合集0 小众站点0 个人博客0 论坛社区0
  • 新闻资讯 0
    科技资讯8 财经媒体1 行业动态0 社会热点0 综合门户0
  • 资讯文章 370

最新收录

  • 车机屋-专业车机系统研究平台,海量正
  • 通义千问
  • 阿里巴巴矢量图标库
  • DeepSeek
  • Kimi
  • 快看漫画
  • 苏宁易购
  • 埋点为什么总对不上数:目录站的事件模

浏览排行

  1. 满分作文网 6
  2. Let's Enhance 3
  3. 淘菜菜 3
  4. MasterClass 3
  5. TypeScript 中文网 3
  6. Zhengziying 3
  7. 得意生活 3
  8. 镇江网友之家 3

联系我们

bQ:12345678

电话:400-8888-888

邮箱:admin@example.com

时间:09:00-21:00

友情链接

车机屋·焊锡条·探兔AI导航·静电测试仪·大学生联盟

关于我们|广告合作|隐私条款|网站地图

原ICP备00000000号-1,@2026

由 Z-BlogPHP 驱动