Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中更新200万行数据的最佳实践是什么?_Mysql_Query Optimization - Fatal编程技术网

在MySQL中更新200万行数据的最佳实践是什么?

在MySQL中更新200万行数据的最佳实践是什么?,mysql,query-optimization,Mysql,Query Optimization,在MySQL中更新200万行数据的最佳实践是什么? 作为按主id更新,我必须按1更新1。太慢了。 如下 UPDATE table SET col1=value1 WHERE id=1; UPDATE table SET col1=value2 WHERE id=2; UPDATE table SET col1=value3 WHERE id=3; UPDATE table SET col1=valueN WHERE id=N; 假设表是innodb(查看SHOW CREATE table t

在MySQL中更新200万行数据的最佳实践是什么? 作为按主id更新,我必须按1更新1。太慢了。 如下

UPDATE table SET col1=value1 WHERE id=1;
UPDATE table SET col1=value2 WHERE id=2;
UPDATE table SET col1=value3 WHERE id=3;

UPDATE table SET col1=valueN WHERE id=N;
假设表是innodb(查看
SHOW CREATE table table
output),其速度慢的原因之一是
innodb\u buffer\u pool\u size
不足

我还假设它处于默认的
auto_commit=1
模式,这意味着每个SQL行都是一个事务

通常最好避免需要更改表中每一行的进程


您可以将其拆分为多个线程进行更新,这样可以更快地通过列表。如果表是MyISAM,它将不会以这种方式缩放。

使用重复键更新时的条件
INSERT
语句在一个查询中更新多行的好方法。如果唯一索引或主键中存在重复值,则语句将更新旧行

插入到表中(id、col1、col2、col3)
值(%s,%s,%s,%s)
关于重复密钥更新
col1=值(col1),
col2=值(col2),
col3=值(col3);
要更新大量的数据,如200万行,请尝试将数据分成数千行的多个查询

还要注意优化提示:和