【问题标题】:Optimize UPDATE statement in MySQL优化 MySQL 中的 UPDATE 语句
【发布时间】:2017-10-18 08:22:10
【问题描述】:

在 MySQL 中,我有一个表,其中存储了近 100 列和 33 000 行数据。我正在尝试运行一个过程,该过程将根据某些条件更新表中的所有列或在表中插入新行。类似的东西:

IF (v_Rows > 0) then
UPDATE tab1 SET
col1 = var1,
col2 = var2,
. . .
col95 = var95
WHERE id = var_id
 ELSE
insert into tab1 values 
(var1, var2, ... var95)
END IF;

这些语句的执行时间过长。我很好奇这样的结构如何优化?

【问题讨论】:

  • 在 Google 上搜索“UPDATE IF EXISTS ELSE INSERT”实现

标签: mysql query-optimization database-administration


【解决方案1】:

INSERT ... ON DUPLICATE KEY UPDATE ...

它使用唯一键来判断该行是否已经存在,然后...

  • 如果不存在则INSERTs;
  • 如果确实存在,它会更新您指定的任何内容。

使用col22 = VALUES(col22) 避免对已经提供的var22 进行“更新”。见VALUES()

如果你有多行以相同的方式同时申请,

INSERT INTO tbl (col1, ...)
    SELECT col1, ... FROM source_tbl ...
    ON DUPLICATE KEY col1 = VALUES(col1), ...;

【讨论】:

    猜你喜欢
    • 2013-03-07
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2010-12-31
    • 2016-02-24
    相关资源
    最近更新 更多