【发布时间】:2011-06-29 11:51:08
【问题描述】:
INSERT INTO ON DUPLICATE KEY UPDATE 和 UPDATE 之间有性能差异吗?
如果我知道可以更新的值 - 我应该使用 UPDATE 还是无关紧要?
【问题讨论】:
标签: mysql
INSERT INTO ON DUPLICATE KEY UPDATE 和 UPDATE 之间有性能差异吗?
如果我知道可以更新的值 - 我应该使用 UPDATE 还是无关紧要?
【问题讨论】:
标签: mysql
有区别。
INSERT 查询必须检查每一列的约束,以查看添加该行是否违反了约束。如果是,则需要找到匹配的行进行更新并执行更新。
UPDATE 查询只需找到要更新的行并执行更新。
如果您知道该行已经存在,您应该只是UPDATE 它。
【讨论】:
考虑以下几点:
UPDATE ... SET ... WHERE <condition when to update>
这意味着数据库引擎将遍历整个表来更新所有符合条件的记录。如果不指定条件,它将对表中的每条记录执行更新。
INSERT INTO ... ON DUPLICATE KEY UPDATE ...
数据库引擎会尝试插入新记录,如果发现你提供的键已经存在,它只会更新该记录,仅此而已。 键列已编入索引,因此它几乎可以立即找出键是否已存在。
阅读this 答案以获取有关KEY 列的更多详细信息。
所以如果你只需要更新一条记录,使用INSERT INTO ... ON DUPLICATE KEY ...可以更快地完成
【讨论】: