多次更新或删除+;在MySQL中插入?
在MySQL中,哪些操作应该执行得更快?假设我有999个值要更改:多次更新或删除+;在MySQL中插入?,mysql,sql,performance,insert,Mysql,Sql,Performance,Insert,在MySQL中,哪些操作应该执行得更快?假设我有999个值要更改: DELETE FROM table WHERE id IN(100, ..., 999); INSERT INTO example VALUES (100, 'Peter'), (...), (999, 'Sam'); 或 因为您只有900行值要更改,所以第一个选项将执行得很快。因为只有两个查询要运行。但如果您选择第二个选项,那么您将有近900个查询要运行,这肯定会减慢速度。这样做更好的办法是 TRUNCATE FROM ta
DELETE FROM table WHERE id IN(100, ..., 999);
INSERT INTO example VALUES (100, 'Peter'), (...), (999, 'Sam');
或
因为您只有900行值要更改,所以第一个选项将执行得很快。因为只有两个查询要运行。但如果您选择第二个选项,那么您将有近900个查询要运行,这肯定会减慢速度。这样做更好的办法是
TRUNCATE FROM table;
INSERT INTO example VALUES (100, 'Peter'), (...), (999, 'Sam');
因为truncate比delete工作得更快 在一般情况下,根据表的当前状态,这两个操作(删除/插入vs更新)可能会产生显著不同的结果。。。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)
场景显示999个值需要更改,所以表可以有数千个或更多记录,但用户只对更改999感兴趣。Himanshu是对的,如果只更新999条记录,我可能会有数百万条记录。在这种情况下,您需要使用选项二,因为批量插入对大量数据有一些限制,因为我之前的答案只针对999行。那么呢?
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)