J'ai besoin d'insert des données d'une table à l'autre dans une boucle avec 10k lignes dans chaque boucle.
Je veux essayer ceci parce que mon insert into ***() select () from ###
prend tellement de time que la table source a des millions d'loggings.
Y aura-t-il une amélioration de la performance en utilisant cette approche?
Vous pouvez essayer d'insert dans les lots et voir s'il y a une amélioration des performances. Voici l exemple de code:
DECLARE @Count INT DECLARE @Start INT SET @Start = 1 SELECT @Count = COUNT(*) FROM TableName1 WHILE @Start<=@Count BEGIN WITH cte AS ( SELECT Col1, Col2, Col3,ROW_NUMBER() OVER (ORDER BY Col1) AS 'RowNum' FROM TableName1 ) INSERT INTO TableName2 SELECT Col1, Col2, Col3 FROM cte WHERE RowNum >= @Start AND RowNum < @Start+10000 SET @Start += 10000 WAITFOR DELAY '00:00:10' END
Ici 10000 est la taille du lot et vous pouvez changer cette valeur selon votre convenance.