我正在寻找使用单个查询一次更新多行的最佳方法。 目前我有:
UPDATE `profiles` SET `name` = CASE `id` WHEN 1 THEN 'John' WHEN 2 THEN 'Jane' END, `gender` = CASE `id` WHEN 1 THEN 'Male' WHEN 2 THEN 'Female' END WHERE `id`=1 OR `id`=2
但这需要大约 4 分钟才能完成(我的实际查询是在一个 2000 万行的数据库中的 10 个字段上),而不是大约需要 1 秒的单个更新查询。
我正在尝试找出原因,到底发生了什么?我认为通过在 WHERE 子句中指定 id 可以加快速度。
最佳答案
请问您可以发布配置文件表的 DDL 吗?这将有助于查看您设置的索引类型(例如 - 我们可以假设 id 列是这里的主键吗?)。如果您使用的是 MySQL,则只需运行“SHOW CREATE TABLE profiles”即可生成 DDL。
可能有帮助的几点:
1) 尝试在 WHERE 子句中使用 BETWEEN 而不是 OR。例如
更新配置文件
SET `name` =
CASE `id` WHEN 1 THEN 'John'
WHEN 2 THEN 'Jane' END,
`gender` = CASE `id`
WHEN 1 THEN 'Male' WHEN 2 THEN 'Female' END
WHERE `id` between 1 and 2;
2) 尝试将查询拆分为单独的查询以避免使用 CASE 语句,例如
update `profiles`
set `name` = 'John',
`gender` = 'Male'
where `id` = 1;
和
update `profiles`
set `name` = 'Jane',
`gender` = 'Female'
where `id` = 2;
我不知道这是否可行,因为我不确定您在什么情况下使用查询!希望对您有所帮助。
关于php - 在一个查询中更新多行性能非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565497/