【问题标题】:Performance question: ON DUPLICATE KEY UPDATE vs UPDATE (MySQL)性能问题:ON DUPLICATE KEY UPDATE vs UPDATE (MySQL)
【发布时间】:2011-06-29 11:51:08
【问题描述】:

INSERT INTO ON DUPLICATE KEY UPDATE 和 UPDATE 之间有性能差异吗?

如果我知道可以更新的值 - 我应该使用 UPDATE 还是无关紧要?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    有区别。

    INSERT 查询必须检查每一列的约束,以查看添加该行是否违反了约束。如果是,则需要找到匹配的行进行更新并执行更新。

    UPDATE 查询只需找到要更新的行并执行更新。

    如果您知道该行已经存在,您应该只是UPDATE 它。

    【讨论】:

      【解决方案2】:

      考虑以下几点:

      • 更新...设置...
      UPDATE ... SET ... WHERE <condition when to update>
      

      这意味着数据库引擎将遍历整个表来更新所有符合条件的记录。如果不指定条件,它将对表中的每条记录执行更新。

      • 插入...在重复密钥更新时...
      INSERT INTO ... ON DUPLICATE KEY UPDATE ...
      

      数据库引擎会尝试插入新记录,如果发现你提供的键已经存在,它只会更新该记录,仅此而已。 键列已编入索引,因此它几乎可以立即找出键是否已存在。

      阅读this 答案以获取有关KEY 列的更多详细信息。

      所以如果你只需要更新一条记录,使用INSERT INTO ... ON DUPLICATE KEY ...可以更快地完成

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-12
        相关资源
        最近更新 更多