缓慢的 MySQL UPDATE 查询

Posted

技术标签:

【中文标题】缓慢的 MySQL UPDATE 查询【英文标题】:Slow MySQL UPDATE query 【发布时间】:2010-09-13 09:32:39 【问题描述】:

我有一个包含 400,000 行的 mysql

每当我运行 php 脚本来更新一行时,大约需要 3-4 秒。

如何优化更新查询?

UPDATE `weakvocab` SET `times` = times+1, `wrong` = wrong+1, `mtime` = 1284369979 WHERE `owner` = 'owner_name' AND `vocID` = 'ID_number' AND `type` = 'type_name';

这个查询是关于在回答一个问题后更新用户数据,所以我需要一个快速的查询来给用户更好的加载下一个问题的体验。

谢谢,

【问题讨论】:

【参考方案1】:

您的 WHERE 条件中的列是否已编入索引?把 UPDATE 改成 SELECT 看看 Mysql 是怎么执行的:

EXPLAIN SELECT * FROM `weakvocab` WHERE `owner` = 'owner_name' AND `vocID` = 'ID_number' AND `type` = 'type_name';

将结果粘贴到这里

【讨论】:

无解释的选择快0.2s左右 @bn 问题不在于 EXPLAIN 的速度,而在于结果。 @bn EXPLAIN 会告诉你是否需要添加任何索引,就像@Mark Byers 在他的回答中提到的那样。【参考方案2】:

您可以尝试在(owner_name, vocID, type) 上添加索引,以便更快地找到要更新的记录。

【讨论】:

如何添加索引,会影响现有数据吗?

以上是关于缓慢的 MySQL UPDATE 查询的主要内容,如果未能解决你的问题,请参考以下文章

缓慢的 MySQL 查询。我应该索引啥?

mysql查询缓慢问题总结

mysql内部连接查询运行缓慢

mysql 表很少,一个大表上的子查询执行缓慢

mysql查询运行缓慢

集群 MySQL 环境中运行缓慢的查询