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

How to UPDATE many rows(1 500 000) fast

我 table 有 150 万行,我有 47k 个值要更新。 我已经尝试了两种方法,但都非常慢。

首先是 47k 行

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

第二个是

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

$query = $prefix . $mid . $suffix;

有没有更快的方法?也许用 LOAD DATA INFILE ?无法弄清楚这个的更新语法。

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

最终我得到了最佳性能的特定组合:

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

显然:

  • 确保不要导入不需要的内容。对包含哪些字段和哪些行持批判态度。
  • 如果您在一列中只有几个不同的文本值,请改用数值。
  • 你的浮点数真的需要 8 位小数吗?
  • 您是否重复导入相同的数据,而您只能在其中插入更新?
  • 确保在导入过程中不会触发不必要的类型转换。准备您的数据,使其尽可能接近您要导入的 table。