Java项目常用数据归档方式

sql归档

insert into 归档表 select * from待归档表,

这种归档方式速度极快,原因有五

1.无网络往返,数据在服务端直接从源表读取写入目标表,不需要将数据传回客户端,避免网络io,

2.最小化日志,在某些数据库中可以使用批量日志模式,比逐行insert产生的redo/undo日志少的多,

3.无解析优化开销,解析和执行计划只做一次,而逐行insert都要解析,

4.批量io,数据库引擎以大块单位读写,属于顺序io,远快于随机io,

5.无索引维护逐行代价,目标表的索引更新可以批量合并,而非逐行维护

手动分区归档

1.主要步骤

创建分区表,一般按照时间范围,

create table order(

id integer,

order_time timestamp,

...

)partition by range (order_time)

创建月度分区

create table order_2026_01 partition of order for values from(2026-01-01)to (2026-02-01)

需要定期创建分区表

归档旧分区

方式一,betach分区后导出归档

alter table order betach partition order_2026_01;

导出为文件存入冷库存

copy order_2026_01 to "/archive/order_2026_01.csv"

删除已归档分区

delete table order_2026_01,

方式二

betach后保留为普通表(仍在线但不算分区)

alter table order betach partition order_2026_01

4.临时挂载回查

alter table order attach partition order_2026_01 for values from (2026-01-01)to (2026-02-01)

优势:

1.归档快,秒级完成,整个分区操作,

2.无锁表

3.主库可控,旧分区可直接drop

4.回查方便

5.分区裁剪自动跳过不相关分区

相关推荐
kyriewen3 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
小码工作室3 小时前
使用 HAVING 进行 MySQL 集合筛选
mysql
罗超驿4 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
小江的记录本4 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
木心术15 小时前
Windows系统下MySQL与AI工具集成方案:数据存储与调用实践
人工智能·windows·mysql
这个DBA有点耶5 小时前
SQL改写实战:子查询、CTE、窗口函数性能对比
数据库·mysql·性能优化
小江的记录本5 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
Java成神之路-6 小时前
深入拆解 MySQL InnoDB 隔离级别:从 MVCC 到临键锁
mysql
罗超驿6 小时前
19.告别复杂SQL!用MySQL视图把逻辑拆成“变量”式操作
数据库·mysql·面试