J'ai une table qui contient des millions d'loggings.
Je modifie un type de données de colonne en un autre (argent en décimal)
Remarquant que cela prend beaucoup de time à exécuter l'instruction alter. Probablement en raison du fait qu'il y a beaucoup de données.
Y a-t-il un moyen d'augmenter la performance pour ce scénario?
Tous les millions de lignes doivent être changés en même time en une seule transaction
Une autre option consiste à créer une nouvelle table, à l'insert par lots, à supprimer l'ancienne table et à renommer la nouvelle table. Cependant, il risque de prendre plus de time de cette façon.
Une façon consiste à créer une table temporaire avec le nouveau type de colonne, copyr datatables de la table d'origine à la température, supprimer l'original, puis renommer la température.
CREATE TABLE dbo.tmp_MyTable (ID Integer, Name varchar (100), MyChangedField decimal (8,2)) INSERT INTO dbo.tmp_MyTable SELECT * FROM dbo.MyTable DROP TABLE dbo.MyTable EXECUTE sp_rename N'dbo.tmp_MyTable', N'MyTable', 'OBJECT'
Gardez à l'esprit, c'est un exemple trop simple. Si votre table d'origine possède des index, des keys et / ou des valeurs par défaut, vous devrez également les gérer.
Une astuce consiste à effectuer la modification dans le concepteur de table SQL Server Management Studio et à générer le script de modification pour voir tout ce qui doit être fait.
Y aurait-il un avantage de time à append la nouvelle colonne décimale à la table, la peupler de la colonne monétaire en plusieurs lots en utilisant un CAST (), et quand tout est fait, en laissant tomber la colonne monétaire?