批量操作进阶:百万行级数据导入的性能极限

简介: 本文分享百万行数据导入四大进阶技巧:分区表减少锁竞争、禁用索引加速写入、并行LOAD DATA榨干多核性能、金仓kdb_load专用工具再提速。实测100万行最快<1秒,助你从分钟级跃升秒级!

大家好,我是小耶,写功课只是为了我踩过的坑,你们别再踩了!

上周讲了批量插入一万行的优化方法,有朋友问:百万行怎么办?确实,数据量再上一个台阶,之前的多行INSERT和LOAD DATA又会碰到新瓶颈。今天分享四个进阶技巧。

1 名词解释

  • 分区表​:将一张大表按某个键(如日期)拆分成多个物理分区,查询时可只扫描相关分区,导入时数据自动落入对应分区,减少锁竞争。
  • 禁用索引​:导入前关闭索引维护(ALTER TABLE t DISABLE KEYS),导入后重建(ENABLE KEYS),可大幅提升写入速度。
  • 并行导入​:将数据文件拆分成多份,同时运行多个导入进程,利用多核CPU和磁盘并行能力。
  • 批量加载工具​:某些数据库自带专用导入工具(如MySQL的mysqlimport),比通用LOAD DATA更高效。

2 实际运用

2.1 分区表

按日期范围分区示例:

CREATE TABLE orders (
    id INT,
    order_date DATE,
    amount DECIMAL(10,2)
) PARTITION BY RANGE (YEAR(order_date)) (
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025)
);

导入时数据自动落入对应分区,减少锁竞争。

2.2 禁用索引

ALTER TABLE orders DISABLE KEYS;
-- 执行批量导入(如 LOAD DATA)
ALTER TABLE orders ENABLE KEYS;

注意:DISABLE KEYS对非唯一索引有效,唯一索引无法禁用。

2.3 并行导入

将1000万行CSV拆成10个100万行的文件,同时运行10个LOAD DATA会话。示例(shell脚本):

for i in {1..10}; do
    mysql -e "LOAD DATA LOCAL INFILE 'data_$i.csv' INTO TABLE orders" &
done
wait

需确保主键不冲突(如使用不同的id范围)。

2.4 专用工具:金仓 kdb_load

金仓数据库(KingbaseES)提供的 kdb_load 工具,用法类似 LOAD DATA,但针对大数据量做了更深度的优化,支持自动拆分、并行加载。

kdb_load -h localhost -d mydb -U myuser -p 54321 -c data.csv -t mytable

主要参数:

  • -h / -p:数据库主机和端口
  • -d:数据库名
  • -U:用户名
  • -c:源数据文件
  • -t:目标表名

相比通用 LOAD DATAkdb_load 在处理100万行以上的数据时,速度可以再快一截,尤其适合批量数据入仓和跨库迁移场景。

3 实测数据(100万行)

方法 耗时 说明
多行INSERT(1000行/批) 25秒 默认配置
LOAD DATA 8秒 基础
禁用索引 + LOAD DATA 4秒 索引重建额外+2秒
并行LOAD DATA(4线程) 1.2秒 需拆分文件
金仓 kdb_load <1秒 专用工具加速更明显

4 价值总结

  • 分区表、禁用索引、并行导入、专用工具这四招,足以把百万行导入从分钟级压到秒级。
  • 不同方法对应不同量级:十万级可用多行INSERT + LOAD DATA,百万级必须上并行 + 禁用索引,千万级以上建议直接用 kdb_load 类专用工具。
  • 实际落地时,可以先小数据量压测,再按实际耗时决定要不要开并行、要不要上专用工具。

小耶在手,SQL不愁。

还有什么想了解的,欢迎留言!小耶一定知无不言言无不尽……我们下次见~

相关文章
|
2月前
|
SQL 关系型数据库 MySQL
一张5000万行的表,加索引从45秒到0.02秒——索引设计你真的会吗
本文实测5000万订单表:无索引查询45秒,加索引后仅0.02秒(提升2250倍)。详解索引原理、建索引时机、联合索引最左前缀、覆盖索引及隐式转换陷阱,干货不啰嗦!
|
3月前
|
缓存 NoSQL 网络协议
如何为我的网站或应用集成IP归属地查询功能?
本文为网站/应用集成IP归属地查询的落地指南:强调“取对IP”是前提(仅信可信上游、严滤私网),采用“本地+Redis缓存+在线API+硬超时熔断”架构,失败自动降级至省/国家;区分展示型与风控型模型,确保可解释、可审计、可回滚,并严守隐私合规红线。(239字)
286 13
|
9天前
|
Web App开发 人工智能 Cloud Native
一人买多用不完,多人分享被封号——"Key池化"破解 AI 订阅共享困局
Claude用户面临“独用浪费、共享封号”困局:Max 20x额度闲置,多人拼车却因IP跳变、指纹泄露等触发风控。Key池化方案通过本地代理+虚拟Key分发,实现额度共享而不共号,规避风控,降低成本(3人仅$200/月),提升安全与体验。
197 7
|
2月前
|
关系型数据库 MySQL 测试技术
JOIN、IN、EXISTS谁最快?实测三种写法性能差异与执行计划深度剖析
本文用MySQL 8.0实测拆解`IN`/`EXISTS`/`JOIN`子查询性能:从执行计划、半连接优化、临时表开销等底层原理出发,结合10万+100万数据实测(`EXISTS`最快95ms),给出三条选型铁律——告别盲从“最佳实践”,只选最适配业务与数据的写法!
|
28天前
|
存储 运维 监控
《告别日志排查:OpenClaw如何修复工具错误指南》
传统工具调用系统依赖预先枚举的错误码,面对异构工具的指数级参数组合和隐蔽语义错误时彻底失效,只能靠人工排查海量日志救火。本文深入拆解OpenClaw的革命性设计,它彻底抛弃被动防御思路,构建了语法校验、语义验证、目标对齐三层递进的语义自愈体系。通过异常语义化建模、工具间协同纠错、动态粒度控制和自学习闭环,将异常转化为系统进化的养分,实现95%以上常见异常的自主修复。这套机制为通用智能体的鲁棒性提供了全新技术路径,重新定义了工具调用的可靠性标准。
223 9
|
2月前
|
运维 容灾 关系型数据库
数据库容灾配置全攻略:同城容灾vs两地三中心,RPO、RTO一篇讲透
数据库小学妹带你轻松搞懂容灾核心概念!本文用通俗语言解析同城容灾、两地三中心、高可用集群,厘清RPO(数据丢失容忍)与RTO(恢复时效)关键指标,对比方案选型要点,并揭秘同步/异步复制、自动切换、读写分离等实战技术,附避坑指南与演练建议。
|
3月前
|
存储 Rust 编译器
协程的承诺——C++20中最复杂特性的设计故事
C++20引入了协程,这被认为是自C++11以来最复杂的语言特性,甚至比模板元编程和移动语义更难掌握。
197 8
|
28天前
|
人工智能 自然语言处理 数据挖掘
用ChatGPT和Codex搭建个人AI工作流:从一人部门到开源实践
本文探讨AI时代“一人部门”工作法:用ChatGPT拆解任务、构建知识库,用Codex将流程工具化,结合复盘与沉淀,打造可持续的个人AI工作系统(OPC)。非替代团队,而是以工具+流程+知识,提升单人可复用、可迭代的系统性产出能力。
544 7
|
28天前
|
人工智能 运维 Cloud Native
其他活动 | PPT合集下载
云原生讲师大会分享材料
270 0
|
2月前
|
SQL 缓存 关系型数据库
主从延迟的5大“元凶”+3个排查命令,别再让从库拖后腿
数据库小学妹详解MySQL主从延迟:5大元凶(硬件弱、写压大、慢查询、网络差、大事务)+3条核心排查命令(SHOW SLAVE STATUS等),助你快速定位、精准优化,避坑生产故障!