Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Performances de SQL Server pour alter table alter column change type de données

Par coïncidence, j'ai dû faire quelque chose de très similaire il y a environ 3 heures. La table faisait 35m de rangées, elle est assez large, et ça prenait une éternité pour faire ça :

alter table myTable add myNewColumn int not null default 0;

Voici ce que j'ai fini par faire :

alter table myTable add myNewColumn int null;

while 1=1
begin
    update top (100000) myTable
    set
        myNewColumn = 0
    where
        myNewColumn is null;

    if @@ROWCOUNT = 0 break;
end

alter table myTable alter column myNewColumn int not null;
alter table myTable add constraint tw_def_myNewColumn default (0) for myNewColumn;

Cette fois-ci, la alter table les déclarations ont été quasi instantanées. Il a fallu environ 7 à 8 minutes (sur un serveur lent) pour effectuer les lots de mise à jour. Je suppose que SQL Server générait une annulation dans ma requête d'origine pour restaurer les valeurs, mais je ne m'attendais pas à ce que cela commence.

Quoi qu'il en soit, dans votre cas, peut-être que quelque chose de similaire aiderait. Vous pouvez essayer d'ajouter une nouvelle colonne bigint, mettre à jour la nouvelle colonne par lots, puis définir les contraintes dessus.