我有一个表有1.5密耳行,我有47k值要更新。我试过两种方法都很慢。
第一个是4.7万排
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条答案
按热度按时间rbl8hiat1#
我每天都要导入大文件,并且尝试各种各样的事情。
最后,我得到了最好的表现具体组合:
首先将csv复制到数据库服务器,然后从本地磁盘加载它,而不是从客户机加载csv。
确保您有一个与此完全匹配的表结构。我使用了一个临时表进行导入,然后使用单独的查询将数据导入到最终的表中。
tmp表上没有外键和唯一索引检查。
这将大大加快事情的发展。如果需要提高性能,可以增加日志缓冲区的大小。
显然:
确保你不进口你不需要的东西。对包含的字段和行要严格要求。
如果一列中只有几个不同的文本值,请改用数值。
你的浮点数真的需要8位小数吗?
是否重复导入相同的数据,但只能插入更新?
确保在导入期间不会触发不必要的类型转换。准备数据,使其尽可能接近要导入的表。