Insert

什麼更快 - 插入新表或從現有表中刪除?

  • February 27, 2017

我有一個巨大的數據庫,我想縮小它,只看我感興趣的領域。最初我想將我感興趣的記錄寫入一個新的數據庫和表中。但是,這是永遠的,所以我想知道刪除我不想要的記錄是否會更快。我已經得到了數據庫的副本,所以刪除沒有問題。

插入語句:

INSERT INTO NewTable (C1, C2, C3, C4, C5, C6, C7) 
SELECT OldTable1.C1, OldTable1.C2, OldTable1.C3, OldTable1.C4, OldTable1.C5, OldTable1.C6, OldTable1.C7 
FROM OldTable1 
INNER JOIN OldTable2.C5 ON OldTable2.C5 = OldTable1.C5 
WHERE OldTable2.C8 = 70

如果我要刪除,我會從 OldTable1 中刪除所有與內部連接和 where 語句不匹配的數據。

這在很大程度上取決於您的數據庫的詳細資訊。

因素包括:

  • 要複製/保留的記錄數量;
  • 無論您是否保留所有列;和
  • 舊表和新表上的索引數(如 @a_vlad 所述)。

如果我需要刪除表中的大部分記錄,我肯定有過將記錄複製到另一個表,TRUNCATE即第一個表,然後將要保存的記錄複製回第一個表(所有索引、約束等;另一個表通常會被剝離為僅原始數據)。

也就是說,如果您保留的記錄明顯多於刪除的記錄,並且如果原始表上沒有很多索引,則刪除速度完全有可能更快。

注意:如果您不需要保留所有列,那麼該INSERT方法幾乎肯定是您的最佳選擇。

引用自:https://dba.stackexchange.com/questions/165537