繁体   English   中英

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

[英]What is the best practice to update 2 million rows data in MySQL?

在 MySQL 中更新 200 万行数据的最佳做法是什么? 作为按主 ID 更新,我必须一个一个地更新。它太慢了。 像下面

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输出),其缓慢的原因之一是innodb_buffer_pool_size不足。

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

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

您可以将其拆分为多个执行更新的线程,这样应该可以更快地通过列表。 如果表是 MyISAM,它不会以这种方式扩展。

使用条件为ON DUPLICATE KEY UPDATEINSERT语句在一个查询中更新许多行的好方法。 如果 UNIQUE 索引或 PRIMARY KEY 中有重复值,该语句将更新旧行。 请参阅文档

INSERT INTO table (id, col1, col2, col3) 
VALUES (%s, %s, %s, %s)
ON DUPLICATE KEY UPDATE 
    col1 = VALUES(col1), 
    col2 = VALUES(col2), 
    col3 = VALUES(col3); 

要更新像 200 万行这样的大量日期,请尝试将您的数据分成几千行的几个查询。

另请注意优化提示: Optimizing INSERT Statements and Bulk Data Loading for InnoDB Tables

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM