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
?
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:
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:
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:
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.