Insert
什麼更快 - 插入新表或從現有表中刪除?
我有一個巨大的數據庫,我想縮小它,只看我感興趣的領域。最初我想將我感興趣的記錄寫入一個新的數據庫和表中。但是,這是永遠的,所以我想知道刪除我不想要的記錄是否會更快。我已經得到了數據庫的副本,所以刪除沒有問題。
插入語句:
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
方法幾乎肯定是您的最佳選擇。