分区表本身不等于归档,必须配合迁移+删除才能释放空间、实现冷热分离;仅用partition by range无法减少主表体积或脱离查询范围。

直接用分区表做归档不现实——它只是物理拆分,不是数据迁移,删不掉热库里的旧数据,也不能释放空间。真要归档,得配合“迁移 + 删除”动作,分区只是让这个过程更可控、更高效。
为什么不能只靠 PARTITION BY RANGE 就算归档完成
分区表本身不等于归档。比如你按年份对 order_log 做了 PARTITION BY RANGE (YEAR(created_at)),2023 年的数据确实在 p2023 分区里,但它仍在主库、仍占内存、仍参与所有未加条件的查询(如 SELECT COUNT(*) FROM order_log),InnoDB 依然要扫描所有分区元数据。
- 分区不减少主表体积,
DELETE或TRUNCATE PARTITION才能真正释放空间 -
TRUNCATE PARTITION p2023快但不可逆,且无法保留原始分区结构做冷备 - 若想把 2023 年数据存到独立归档库,分区本身不提供跨库导出能力,还得走
SELECT ... INTO OUTFILE或 PDO 批量读写 - MySQL 5.7+ 支持
EXCHANGE PARTITION,但要求目标表结构完全一致且引擎相同(如都是 InnoDB),实际中归档库常用ARCHIVE引擎,这条路走不通
SELECT INTO OUTFILE + LOAD DATA INFILE 是最稳的归档搬运链路
比 mysqldump 更适合大表归档:绕过客户端协议、不拉长事务、不堆积临时文件,且能精准控制导出路径和字段顺序。
- 导出必须在 MySQL 服务端本地路径执行,例如
/var/lib/mysql-files/order_log_2023.csv,PHP 不能指定自己机器上的路径 - 导出前加
SET SESSION sort_buffer_size = 268435456,避免ORDER BY created_at触发磁盘排序 - 导出语句要显式列出字段,别用
*,防止源表加字段后归档表结构错位:SELECT id,user_id,amount,created_at FROM order_log WHERE created_at - 导入时用
LOAD DATA INFILE '/var/lib/mysql-files/order_log_2023.csv' INTO TABLE archive_order_log,注意目标表需提前建好,且secure_file_priv配置允许该路径
分批删除原表数据时,WHERE 条件必须命中索引
一次性 DELETE FROM order_log WHERE created_at 在千万级表上大概率锁表、打满 binlog、拖垮从库复制。必须分片、限流、索引驱动。
- 确认
created_at字段有单独索引或联合索引的最左前缀,用EXPLAIN检查type不是ALL - 每次删 5000 行以内,用子查询避开
DELETE ... LIMIT的非标准行为:DELETE FROM order_log WHERE id IN (SELECT id FROM (SELECT id FROM order_log WHERE created_at - PHP 循环中每删一批后调用
usleep(100000)(100ms),给 I/O 和复制线程喘息时间 - 删完立刻执行
OPTIMIZE TABLE order_log(仅 MyISAM 必须;InnoDB 可选,但大删后建议做)
归档表引擎选 ARCHIVE 还是 MyISAM?看查询模式
归档库不是线上库的镜像,它只读、不更新、空间敏感。引擎选择直接影响存储效率和查询能力。
- 选
ARCHIVE:字段少、行数极多(>5000 万)、只按时间范围查(如BETWEEN ? AND ?)、不建索引、不统计总数——压缩率通常超 90%,但COUNT(*)极慢,且任何UPDATE/DELETE都报错 - 选
MyISAM:需要高频点查(如查某user_id)、要GROUP BY统计、能接受 2~3 倍存储空间——支持索引,COUNT(*)是 O(1),但崩溃恢复弱,不支持事务 - 切忌在
ARCHIVE表上建索引:引擎根本不识别,SHOW CREATE TABLE看不到,EXPLAIN也显示无索引 - 无论哪种引擎,归档完成后都执行
ANALYZE TABLE archive_order_log,否则优化器可能误判执行计划
归档真正的难点不在“怎么搬”,而在“搬得准不准、删得干不干净、查得快不快”。分区只是帮你看清数据边界,不是自动归档开关;引擎选错会导致后续查不动或存不下;而分批删除时漏掉索引或休眠,轻则延迟,重则主库雪崩。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











