2013-03-22 91 views
0

哪些操作應該在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

回答

0

因爲你只有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

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) 
相關問題