在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;
这些语句需要花费太多时间来执行。我很好奇这种结构如何优化?
答案 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), ...;