我的表有 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
?无法弄清楚这个 UPDATE 语法。
最佳答案
我每天都必须导入大文件,并尝试了各种方法。
最终我获得了以下特定组合的最佳性能:
- 首先将 CSV 复制到数据库服务器,然后从本地磁盘加载它,而不是从客户端计算机加载 CSV。
- 确保您有一个与此完全匹配的表结构。我使用临时表进行导入,然后使用单独的查询将数据导入最终表。
- tmp 表上没有外键和唯一索引检查。
- 这已经可以加快速度了。如果您需要压缩更多性能,可以增加日志缓冲区大小。
显然:
- 确保您不导入不需要的内容。对于包含哪些字段以及哪些行,请务必谨慎。
- 如果列中只有几个不同的文本值,请改用数值。
- 您的 float 真的需要 8 位小数吗?
- 您是否重复导入相同的数据,而只能插入更新?
- 确保导入期间不会触发不必要的类型转换。准备数据,使其尽可能接近您要导入的表。
关于mysql - 如何快速更新多行(1 500 000),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53453230/