Moyen le plus rapide de copier en bloc entre les tables

sql sqlbulkcopy sql-server-2008

Question

J'ai une table SQL Server avec des colonnes, appelez-les A et B. J'ai créé une nouvelle table avec une colonne de type et une colonne de valeur unique. Je souhaite copier toutes les lignes (il y en a 50 millions) de la table existante dans la nouvelle, de sorte que pour chaque ligne de la première table, il y a 2 lignes dans la seconde (une pour la valeur A, une pour la valeur B). J'ai un script simple qui va le faire

insert into NewTable (ResultTypeId, Value)
(select @typeA, valueOfA from OldTable
union all
select @typeB, valueOfB from OldTable)

Cette approche naïve prend environ 8 minutes. Y at-il un moyen plus rapide de faire cela?

Réponse populaire

Choses à essayer:

  1. Charger en deux étapes au lieu d'utiliser l'union. (100 millions d’enregistrements, c’est beaucoup à faire en une transaction.)
  2. Ne créez pas de clé primaire ni d'index sur la table de destination avant le chargement.
  3. Utilisez une insertion en bloc au lieu d' insert into ... select . Voici un endroit pour commencer: http://social.msdn.microsoft.com/Forums/sqlserver/en-US/b2b59376-e039-485b-84ef-613122a043f0/bcp-or-bulk-insert-why?forum=transactsql


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi