You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效将5GB含2600万条记录的大文本文件导入MySQL

核心结论先给你
  • 你当前的导入思路存在明确的方向性错误:你测试的每分钟千条级的导入速度,是用逐行插入的低效方式跑出来的,完全不是MySQL的正常导入水平,按正确方法操作,2600万行数据导入耗时在10-30分钟区间,根本不需要几百小时。
  • 单张MySQL表存储全量数据的方案,性能比你之前拆分280个Access库的方案高2个数量级以上,完全不需要拆分数据。
为什么你之前的方案这么慢
  1. Access本身是桌面级文件数据库,没有服务端查询优化能力,跨280个链接表的查询无法做批量计算优化,全表扫描、聚合类操作跑几小时是必然的,2600万行已经远超Access的舒适处理区间。
  2. 你之前的MySQL导入测试大概率是用可视化工具的导入向导、或者自己写逐行INSERT语句执行:这种模式每插一行就做一次事务提交、一次索引维护,IO开销被放大了几百倍,速度当然上不去。
最优导入操作步骤

前置准备

  • 先微调你的表结构:所有单字符标识字段把varchar(1)换成CHAR(1),定长字段的存储、检索效率比变长字段高,还能节省存储空间。如果这些字段存的都是0/1、Y/N类标识,换成TINYINT(1)存储效率还能更高,需要保留原字符值的话用CHAR(1)就足够。
  • 导入前先删除表上的主键约束:导入过程中实时维护主键索引的开销会拖慢导入速度3-5倍,等全量数据导入完成后再加回主键即可。
  • 登录MySQL后先执行以下会话级参数调整,临时关闭导入过程中不必要的校验和日志开销:
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
-- 如果是本地单节点使用、不需要主从同步/数据恢复日志,可以执行下一句,进一步降低IO开销
SET sql_log_bin=0;

核心导入操作

不要用任何可视化工具的导入向导,直接用MySQL原生的LOAD DATA INFILE命令做批量加载,这是MySQL专门为大文件全量导入设计的功能,普通机械盘环境下就能达到每秒10万-30万行的导入速度,是逐行插入效率的几百倍。
参考命令模板:

LOAD DATA INFILE '你的数据文件绝对路径' -- Windows系统路径注意用正斜杠,比如C:/data/your_file.txt
INTO TABLE Mydata
-- 下面几个参数根据你的文本文件实际格式调整
FIELDS TERMINATED BY ',' -- 替换为你的文件实际字段分隔符,制表符分隔就填'\t'
ENCLOSED BY '"' -- 如果字段值用双引号包裹就保留,没有的话删掉这行
LINES TERMINATED BY '\r\n' -- Windows生成的文本一般换行符是\r\n,Linux生成的是\n,按实际情况改
IGNORE 1 LINES; -- 如果文件第一行是字段名表头就保留,没有就删掉这行

如果执行时提示文件权限错误,把LOAD DATA INFILE改成LOAD DATA LOCAL INFILE即可,文件放在客户端可访问的路径下就行。
5GB的单文件完全不需要拆分成280个小文件,LOAD DATA可以直接稳定读取。如果担心导入中途出错需要重跑,最多拆成2-3个1-2G的文件依次导入即可,比你之前的拆分工作量少90%以上。

导入收尾

  • 全量数据导入完成后,先执行COMMIT;提交事务
  • 把之前调整的参数改回默认值:
SET unique_checks=1;
SET foreign_key_checks=1;
SET autocommit=1;
-- 之前关闭了二进制日志的话记得执行下一句打开
SET sql_log_bin=1;
  • 给表加回主键:
ALTER TABLE Mydata ADD PRIMARY KEY (URN);

这一步会自动完成数据去重、排序和索引构建,2600万行数据在普通机械盘上耗时也就几分钟,远低于导入过程中实时维护索引的开销。

  • 后续根据你实际的查询场景,给经常作为筛选条件的字段(比如Postcode、Town)加普通索引即可,不要一开始建一堆无用索引占用空间。
后续查询性能说明

2600万行的单表对于MySQL的InnoDB引擎来说是非常常规的数据量级,只要查询时命中索引,常规的筛选、聚合、关联操作耗时都是秒级到几十秒级,对比你之前Access方案几小时的耗时提升非常明显。
你后续用Access做前端操作时,安装官方的MySQL ODBC驱动创建链接表即可,Access会自动把查询条件下推到MySQL服务端执行,不要在Access端拉取全量数据做本地计算,完全可以支撑你的日常分析工作。如果条件允许把MySQL部署在SSD盘上,查询和导入速度还能再提升3-10倍。

内容的提问来源于stack exchange,提问作者Ash_stack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:39:35