好的,假设我有 3 个 sql 表和一个文本文件。文本文件为 CSV 格式。文件结构 - 想象每一行都有一个数组。值 0 时间戳;选项卡 1 的 1、4、7、10 值;选项卡 2 的 2、5、8、11 个值;选项卡 3 的 3、6、9、12 值。在处理到 db 后插入数据的最佳方法是什么?解决方案 1. foreach 行读取“插入选项卡...;” 我目前正在使用它,这需要很多时间。解决方案 2. foreach line read 将 sql 语句推送到一个数组中,当我处理完所有行后,创建一个字符串,如“Insert into tab ...; insert into tab ...; insert into tab ...;” 并执行查询。文件有大约。4000 行,每个表有 7 个值。
问问题
270 次
2 回答
1
您应该使用批量插入而不是为每条语句做一条记录。在您的情况下,每个表都应该有一个插入语句(除非给定表的记录多于一个“mysql数据包”)。
如果您使用批量插入,您应该确保每个批量插入不超过max_allowed_packet变量。
您可能还会发现索引是您最大的瓶颈。之前禁用它们并在大插入之后重新启用它们可能会有所帮助。请参阅:如何在 innodb 中禁用索引
最后,MySQL 可以应用这种技术,用于高带宽插入。
于 2013-08-10T07:24:03.537 回答
0
我认为你可以使用 MYSQL 语法
LOAD DATA INFILE '/path/to/file' INTO TABLE tbl_name
于 2013-08-10T08:29:01.107 回答