【问题标题】:Insert lots of data at once using Laravel migrations?使用 Laravel 迁移一次插入大量数据?
【发布时间】:2014-02-28 11:41:49
【问题描述】:

我目前解析一个 CSV 文件以将数据插入数据库,但问题是因为它有 20 000 行,所以需要很长时间。有没有办法使用 Laravel 迁移一次插入更多行?

这就是我现在正在做的事情:

foreach ($towns as $town) {
   DB::table('town')->insert(
      array(
         // data goes here
      )
   );
}

我想我的问题可能有点含糊。我想知道使用一个查询批量插入多个项目的格式是什么,这是否真的会影响速度?

【问题讨论】:

  • 我也遇到过这个问题,但是如果你将 $towns 数组/对象分成更小的部分,我认为它会起作用。使每个数组最多包含 5000 个条目
  • PHPExcel 包在您需要保存电子表格格式数据或创建电子表格时非常有用,但我会避免在这里使用它,因为它非常占用内存并且只会让 OP 的问题变得更糟。
  • 插入时,您可以传入一个未索引的数组数组,而不是为每个表格行传入一个数据数组,这比一次传入一行要快一些。

标签: laravel migration


【解决方案1】:

您可以通过用您的数据填充数组来批量插入:

foreach ($towns as $town) {
   $array[] = array(... your data goes here...);
}

然后只运行一次

DB::table('town')->insert($array);

但我真的不知道它可以快多少。您还可以禁用查询日志:

DB::disableQueryLog();

它使用更少的内存并且通常更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-18
    • 2018-02-13
    • 2013-10-22
    • 1970-01-01
    • 2020-06-04
    • 2014-06-23
    • 2014-06-05
    • 1970-01-01
    相关资源
    最近更新 更多