web-dev-qa-db-fra.com

Copier une quantité énorme de 1 table à d'autres

J'ai deux tables avec la même structure que j'ai besoin de copier sur toutes les tables de Tableau A au tableau B, le problème est que certains enregistrements du tableau A existent déjà dans le tableau B de sorte que l'import échoue.

J'ai donc fait une requête pour faire l'importation (également à l'aide de l'outil de construction d'importation) comme celle-ci

SELECT * from TransactionEntryN
WHERE TransactionEntryN.TransactionEntryID 
NOT IN (select TransactionEntryID FROM TransactionEntry)

Le problème est que cette opération prend 13 min. Pour copier seulement 50k enregistrements et j'ai 16 millions d'enregistrements là-bas, cela me faudrait une semaine pour terminer cela ...

Y a-t-il un moyen plus rapide de le faire?

bTW Le transaction de clé principale est un caractère unique qui pourrait le ralentir? (Je ne peux pas le changer, je me demandais simplement si ce problème.

3
Ezi

Si vous souhaitez que la deuxième table contienne les mêmes données que la première table, pourquoi ne pas simplement essuyer la table et le remplacer?

BEGIN TRANSACTION;

  DROP TABLE TransactionEntry;

  SELECT * INTO dbo.TransactionEntry FROM dbo.TransactionEntryN
    -- other WHERE clauses?
  ;

COMMIT TRANSACTION;
-- create indexes / permissions etc.
3
Aaron Bertrand