【问题标题】:PHP - Insert Into mysql multiple rows best approachPHP - 插入 mysql 多行的最佳方法
【发布时间】:2013-08-10 07:11:55
【问题描述】:

好的,假设我有 3 个 sql 表和一个文本文件。 文本文件为 CSV 格式。 文件结构 - 想象每一行都有一个数组。值 0 时间戳;选项卡 1 的 1、4、7、10 值;选项卡 2 的 2、5、8、11 个值;选项卡 3 的 3、6、9、12 个值。 在处理到数据库后插入数据的最佳方法是什么? 解决方案 1. foreach 行读取“插入到选项卡...;”我目前使用的,它需要很多时间。 解决方案 2. foreach line read 将 sql 语句推送到一个数组中,当我处理完所有行后,创建一个字符串,如“Insert into tab ...; insert into tab ...; insert into tab ...;”并执行查询。 文件有大约。 4000 行,每个表有 7 个值。

【问题讨论】:

  • 我假设您要的是代码,对吗?
  • 不,我不是要代码。我要求最好的方法。在读取和处理每一行时将数据发送到 sql,或者使用 sql 语句为每个行创建一个数组,然后从所有数组元素中创建一个字符串并将查询发送到 mysql。

标签: php mysql insert row


【解决方案1】:

您应该使用批量插入,而不是为每条语句创建一条记录。在您的情况下,每个表应该有一个插入语句(除非给定表的记录多于一个“mysql数据包”)。

见:How to do a batch insert in MySQL

如果您使用批量插入,您应该确保每个批量插入不超过max_allowed_packet 变量。

您可能还会发现索引是您最大的瓶颈。之前禁用它们并在大插入之后重新启用它们可能会有所帮助。见:How to disable index in innodb

最后,MySQL 可以将this technique 应用于它,以实现高带宽插入。

【讨论】:

    【解决方案2】:

    我认为你可以使用 MYSQL 语法

    LOAD DATA INFILE '/path/to/file' INTO TABLE tbl_name
    

    http://dev.mysql.com/doc/refman/5.1/en/load-data.html

    【讨论】:

      猜你喜欢
      • 2014-12-14
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      相关资源
      最近更新 更多