当前位置: 首页 > news >正文

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

关键词​:批量导入;LOAD DATA;分区表;并行导入;MySQL


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

上周讲了批量插入一万行的优化方法,有朋友问:百万行怎么办?确实,数据量再上一个台阶,之前的多行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 DATA8秒基础
禁用索引 + LOAD DATA4秒索引重建额外+2秒
并行LOAD DATA(4线程)1.2秒需拆分文件
金仓kdb_load<1秒专用工具加速更明显

4 价值总结

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

小耶在手,SQL不愁。

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

参考文献

[1] MySQL官方文档:INSERT Statement Optimization
[2] MySQL官方文档:LOAD DATA Statement
[3] 金仓数据库管理员指南:kdb_load 并行加载工具

http://www.jsqmd.com/news/849172/

相关文章:

  • 采购必看:管路蒸汽成型设备厂家哪家好?2026管路成型隧道炉厂家推荐:领拓工业领衔|优质管路蒸汽成型设备厂家盘点 - 栗子测评
  • 影像技术实战16:视频抽帧重复太多?dHash + 时间窗口构建关键画面去重方案
  • Python爬虫实战㉒|Matplotlib基础,画出专业级数据图表
  • 2026年口碑好的贵阳暴龙眼镜公司对比推荐 - 品牌宣传支持者
  • 影像技术实战17:图片格式转换踩坑复盘:PNG、JPEG、WebP、透明通道与颜色模式的工程处理方案
  • 【199管理类联考】数学75考点(基础)
  • 别再手动拖拽了!用Java POI + XSSFDrawing,5行代码搞定Excel单元格图片批量插入(附完整源码)
  • 一文读懂天镜灯、台灯、LED 照明、恒流灯带、UVC 紫外杀毒灯驱动芯片,专业厂家优选谦诚半导体 - 栗子测评
  • QT的C++接口基础用法
  • 告别格式大战!用VSCode的Prettier插件拯救你的代码洁癖(含保存即格式化、快捷键技巧)
  • 完全开源的语言模型学习记录--Dispersion Loss 降低小模型坍缩
  • 三维动画心得:从入门到认知
  • ARMv8-A架构AArch64异常处理机制详解
  • 如何实现TVA与RV的协同进化?
  • 源头电主轴厂家推荐!顺源精密专注进口电主轴维修,自研高速精密电主轴,告诉你电主轴哪家好,行业口碑优选 - 栗子测评
  • 别再让一条宽带拖慢整个公司!手把手教你用H3C防火墙配置双WAN口负载均衡(附HCL模拟器配置)
  • Java并发编程高频面试题附深度扩展
  • 禅论算法引擎:通达信K线结构智能解析系统深度剖析
  • 影像技术实战18:视频静音检测不准?FFmpeg silencedetect + 非静音片段生成完整方案
  • 想省时间、提效率?SOLIDWORKS 库特征值得每一位工程师试试
  • ETime:高效推动你的时间
  • 国内诚信工业厂房搭建源头厂家优选|顶天钢结构一站式施工解决方案,工业厂房搭建/搭建工业厂房,工业厂房搭建团队推荐 - 品牌推荐师
  • TXID详解
  • Langchain的学习(一)
  • C++(模拟法下练习题)
  • 杭州即刻飞行体育文化传播有限公司2026上海滑翔伞培训机构优选:江浙沪滑翔伞培训机构含考证费用与考证攻略推荐杭州即刻飞行 - 栗子测评
  • RabbitMQ 集群网络分区如何配置分区处理策略
  • 别再只会用阻塞式了!STM32CubeMX串口非阻塞收发实战(附LED灯控制案例)
  • 从沙子到车辙(1.1):什么是“计算”?
  • 手机店还会存在吗