多个UPDATE或DELETE + INSERT在MySQL中?

问题描述:

哪些操作应该在MySQL中执行得更快?假设我有999个值改变:多个UPDATE或DELETE + INSERT在MySQL中?

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; 
+0

什么['REPLACE'(http://dev.mysql.com/doc/refman/5.5/en/replace.html)? – Carsten 2013-03-22 12:22:45

因为你只有900行值改变,然后第一个选项将执行快。因为你将只有两个查询运行。但如果你选择第二个选项,那么你将有近900个查询运行,肯定会减慢。更好的想法做同样的将

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

因为truncate工作比删除更快。

+0

场景说要更改999个值,所以表可以有数千个或记录,但用户只想更改所有999个。 – 2013-03-22 12:16:32

+0

Himanshu是正确的,我可以有数百万记录的想法只更新999个记录。 – 2013-03-22 12:35:25

+0

在这种情况下,您需要使用选项2,因为批量插入对于大量数据有一些限制,因为我以前的答案仅适用于999行。 – 2013-03-22 12:39:29

在一般情况下,根据表的当前状态,这两个操作(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)