MySQL中有多个UPDATE或DELETE + INSERT?

时间:2013-03-22 12:00:02

标签: mysql sql performance insert

哪些操作应该在MySQL中执行得更快?假设我有999个值要改变:

DELETE FROM table WHERE id IN(100, ..., 999);
INSERT INTO example VALUES (100, 'Peter'), (...), (999, 'Sam');

OR

UPDATE table_name SET name='Peter' 
WHERE person_id=100; ...; UPDATE table_name SET name='Sam' WHERE person_id=999;

2 个答案:

答案 0 :(得分:0)

由于您只需更改900行值,因此第一个选项将快速执行。因为您只需要运行两个查询。但是如果你选择第二个选项,那么你将有近900个查询要运行,这肯定会变慢。更好的想法是做

TRUNCATE FROM table;
INSERT INTO example VALUES (100, 'Peter'), (...), (999, 'Sam');

因为truncate比delete更快。

答案 1 :(得分:0)

在一般情况下,基于表的当前状态,这两个操作(DELETE / INSERT vs UPDATE)可能具有显着不同的结果...是否存在id = 999的行?是否有引用此表的外键约束?表中是否定义了任何触发器?

如果规范要更新表中的行,我会发出UPDATE语句,而不是发出DELETE和INSERT。

有些因素无法超速考虑。

但最快的可能是:

 UPDATE example t
    SET t.name  
        = CASE t.id
            WHEN 100 THEN 'Peter'
            WHEN ...
            WHEN 999 THEN 'Sam'
            ELSE t.name
          END
   WHERE t.id IN (100,...999)