优化MySQL

时间:2017-10-18 08:22:11

标签: mysql query-optimization database-administration

在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;

这些语句需要花费太多时间来执行。我很好奇这种结构如何优化?

1 个答案:

答案 0 :(得分: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), ...;