Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多次更新或删除+;在MySQL中插入?_Mysql_Sql_Performance_Insert - Fatal编程技术网

多次更新或删除+;在MySQL中插入?

多次更新或删除+;在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

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

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)