php - 在一个查询中更新多行性能非常慢

标签 php mysql sql centos

我正在寻找使用单个查询一次更新多行的最佳方法。 目前我有:

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/

相关文章:

php - 使用PHP;我想检查 mysql 数据库以确保在注册之前没有相同电子邮件地址的记录

php - 与您的 MySQL 服务器版本相对应的手册,以便在附近使用正确的语法

php - 在没有数据库的情况下创建 Symfony 4 表单

PHP MySQL简单任务管理系统带消息如何通知新消息?

mysql - 通过 Entity Framework 获取 MYSQL UTC_TIMESTAMP

php - Android Mysql - 结果太多

mysql - 将数据从本地计算机上的 dbf 文件持续导入 MySQL 的最简单方法

php - Laravel 代客日志

mysql - 如何查询包含对象数组的 MySQL JSON 列

mysql - 如何在存储过程中声明保存选择查询结果的变量?