是否有一种智能的方法来在MySQL中进行大规模更新?

时间:2011-04-22 04:08:19

标签: mysql

我有一张需要定期更新的表格。这些更新分批进行。与INSERT不同,我不能在单个查询中包含多行。我现在所做的是准备UPDATE语句,然后遍历所有可能性并执行每个。当然,准备只发生一次,但仍然有很多处决。

我创建了不同大小的表的几个版本(认为可能更好的索引或拆分表会有所帮助)。但是,这对更新时间没有影响。对于1,000行表或500,000行表,100次更新大约需要4秒。

有更聪明的方法可以更快地完成这项工作吗?

正如评论中所说,这是我一直在测试的实际代码(PHP)。列'id'是主键。

$stmt = $dblink->prepare("UPDATE my_table SET col1 = ? , col2 = ? WHERE id = ?");
$rc = $stmt->bind_param("ssi", $c1, $c2, $id);
foreach ($items as $item) {
    $c1 = $item['c1'];
    $c2 = $item['c2'];
    $id = $item['id'];
    $rc = $stmt->execute();
}
$stmt->close();

2 个答案:

答案 0 :(得分:2)

如果你真的想在一个大的声明中完成所有这一切,那么使用insert语句的“on duplicate key”功能就会很糟糕,即使所有的行都应该存在,并且重复的密钥更新将会每一行都会命中。

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
  ON DUPLICATE KEY UPDATE 1=VALUES(a), b=VALUES(b), c=VALUES(c);

答案 1 :(得分:2)

尝试LOAD DATA INFILE。比MySQL INSERT或UPDATES快得多,只要你能以平面格式获取数据。