哪些操作应该在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;
答案 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)