如何快速更新许多行(1 500 000)

时间:2018-11-23 21:43:32

标签: mysql sql-update load-data-infile

我的表有150万行,并且有47k个值需要更新。 我已经尝试了两种方法,但是两种方法都很慢。

首先是47k行

UPDATE $table SET name='$name' WHERE id='$id'

秒是

$prefix = "UPDATE table
    SET name = (case ";
while () {
    $mid .=  "when id = '$id' then '$name' ";   
}
$sufix = "end);";

$query = $prefix . $mid . $sufix;

有没有一种更快的方法?也许和LOAD DATA INFILE在一起?不能用这种方法弄清UPDATE语法。

1 个答案:

答案 0 :(得分:0)

我不得不每天导入大文件,并尝试了各种方法。

最后,我获得了最佳表现,具体组合如下:

  1. 首先将CSV复制到数据库服务器,然后从那里的本地磁盘加载它,而不是从客户端计算机加载CSV。
  2. 确保您具有与此完全匹配的表结构。我使用了一个临时表进行导入,然后对此使用了单独的查询,以将数据导入最终表。
  3. tmp表上没有外键和唯一索引检查。
  4. 这将大大加快速度。如果需要提高性能,可以增加日志缓冲区的大小。

显然:

  • 确保您不会导入不需要的东西。对您包括哪些字段以及哪些行至关重要。
  • 如果一列中只有几个不同的文本值,请改用数字值。
  • 您真的需要8个小数吗?
  • 您是否重复导入相同的数据,只能在其中插入更新?
  • 确保在导入过程中不会触发不必要的类型转换。准备数据以使其与要导入的表尽可能近。