web-dev-qa-db-fra.com

Insérer dans le tableau sélectionner * à partir du tableau par rapport à l'insertion en vrac

Je voulais juste savoir que l'instruction SQL INSERT INTO TABLE1 SELECT * FROM TABLE2, fonctionnera comme un insert en vrac?

Si non, existe-t-il un moyen d'exclure l'index lors de l'insertion d'enregistrements. Le processus insère 150 millions de données en une seule exécution.

Nous prévoyons de créer une table de scène (qui n'aura pas d'index Table1), puis transférez-la de la table des étapes vers la table cible (qui aura l'index Table2)

Nous ne sommes pas dans la situation de créer un fichier plat à partir du processus.

Mais nous recherchons quelque chose qui peut accélérer le processus lorsque nous transférons des données de Table1 (non indexé) à Table2 (indexé).

N'importe quelle façon d'utiliser BulkInsert depuis Table1 à Table2?

6
Virul Patel

Votre meilleur pari sera d'utiliser [~ # ~] ssis [~ # ~] ou INSERT EN VRAC . Il existe différentes améliorations de performances que vous pouvez faire lorsque vous les utilisez et elles sont très bien documentées dans The Data Loading Performance Guide .

Au niveau [~ # ~] ssis [~ # ~] , vous pouvez examiner les éléments ci-dessous pour accélérer la lecture et le chargement des données:

  • Fast Parse Option avec ses limites.
  • Utilisez SQL Server Native Client 10.x OLE DB pour une connexion en mémoire à hautes performances)
  • Définissez la taille du paquet sur 32767
  • Sélectionnez l'option OLE Mode d'accès aux données de la base de données "Table ou vue - chargement rapide"

Reportez-vous à Accélération des insertions en vrac SSIS dans SQL Server pour plus de détails.

Voici quelques bonnes façons d'améliorer les opérations BULK INSERT:

  1. Utilisation de TABLOCK comme indice de requête.
  2. Suppression d'index pendant l'opération de chargement en bloc, puis une fois qu'il est terminé, puis recréez-les.
  3. Modification du modèle de récupération de la base de données en BULK_LOGGED pendant l'opération de chargement.
  4. Si la cible a un index clusterisé, la spécification de la clause ORDER BY dans l'opération d'insertion en bloc augmentera la vitesse de chargement de BULK.
  5. Utilisation de l'indicateur de trace 610 au début de l'opération BULK INSERT.

Le degré maximal de parallélisme doit être configuré sur le serveur plutôt que par défaut. Vous pouvez vous référer à ma réponse sur la façon dont il le configure ici .

Si vous utilisez SQL Server 2014, alors SELECT ... INTO est parallèle .

En outre, vous devez surveiller les statistiques d'attente sur le serveur, en particulier SOS_SCHEDULER_YIELD, ce qui entraîne une contention du planificateur sur les serveurs ayant plusieurs processeurs exécutant des opérations de chargement en bloc simultanées et en concurrence pour le même processeur Cycles.

Voir également:

14
Kin Shah

Oui. Un insert dans table2 select * from table1 agit à peu près comme un insert en vrac. Ne fonctionne que lorsque les tableaux sont identiques je crois.

0
Maria nardi