多个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;
因为你只有900行值改变,然后第一个选项将执行快。因为你将只有两个查询运行。但如果你选择第二个选项,那么你将有近900个查询运行,肯定会减慢。更好的想法做同样的将
TRUNCATE FROM table;
INSERT INTO example VALUES (100, 'Peter'), (...), (999, 'Sam');
因为truncate工作比删除更快。
场景说要更改999个值,所以表可以有数千个或记录,但用户只想更改所有999个。 – 2013-03-22 12:16:32
Himanshu是正确的,我可以有数百万记录的想法只更新999个记录。 – 2013-03-22 12:35:25
在这种情况下,您需要使用选项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)
什么['REPLACE'(http://dev.mysql.com/doc/refman/5.5/en/replace.html)? – Carsten 2013-03-22 12:22:45