mysql - 哪个是快速加载数据 infile 或正常插入?

标签 mysql insert bulkinsert load-data-infile

我有一个表有4000万条记录,我想像这样把这40M复制到80M-

INSERT INTO cdr (id,dataPacketDownLink, dataPacketUpLink,dataPlanEndTime,dataPlanStartTime,dataVolumeDownLink,dataVolumeUpLink,
dataplan,dataplanType, createdOn, deviceName, duration, effectiveDuration, HOUR, eventDate, msisdn, QUARTER, validDays, dataLeft,completedOn,evedate)SELECT null,dataPacketDownLink, dataPacketUpLink,dataPlanEndTime,dataPlanStartTime,dataVolumeDownLink,dataVolumeUpLink,
dataplan,dataplanType, createdOn, deviceName, duration, effectiveDuration, HOUR, eventDate, msisdn, QUARTER, validDays, dataLeft,completedOn,eve_date FROM cdr;

使用这个是正确的还是我应该使用 SELECT INTO OUTFILE 和 LOAD DATA INFILE 来快速插入? 还是有比以上两种更好的方法?

谢谢。

最佳答案

您当前的解决方案相当不错,但如果您的表有很多索引,那可能会减慢速度。索引有利于搜索,但会减慢插入速度。

您可以尝试先删除所有(或大部分)索引,复制所有数据,然后重新创建它们。或者,您可以构建一个没有索引的新表,将所有数据复制到那里,在新表上创建索引,然后删除旧表并重命名新表。

不过,我以前见过这么大的 table 修改需要这么长时间。不幸的是,MySQL 在这些事情上不是很快。

关于mysql - 哪个是快速加载数据 infile 或正常插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20297932/

相关文章:

java - 迭代单链表中的节点以获取字符串输入

c# - ASP.Net 将多个标签插入不同的数据库行

SQL Server 大容量插入跳过主键冲突

oracle - 将数据插入相关 Oracle 表并维护标识值列表

mysql - 存储过程 IN、OUT、INOUT 参数

php - 插件国际化的提示

Android Studio 光标显示错误

php - 获取最后插入的 id 返回 null

php - 当多行满足 WHERE 子句时 MySQL 返回 false

php - 如何使用PHP和外键将 "a lot"数据导入MySQL?