sql >> Base de Datos >  >> RDS >> Sqlserver

Rendimiento de SQL Server para modificar el tipo de datos de cambio de columna de modificación de tabla

Coincidentemente, tuve que hacer algo muy similar hace unas 3 horas. La mesa tenía filas de 35 m, es bastante ancha y tardaba una eternidad en hacer esto:

alter table myTable add myNewColumn int not null default 0;

Esto es lo que terminé eligiendo:

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;

Esta vez, la alter table Las declaraciones fueron casi instantáneas. Tomó alrededor de 7-8 minutos (en un servidor lento) hacer los lotes de actualización. Estoy especulando que SQL Server estaba generando deshacer en mi consulta original para restaurar los valores, pero no esperaba que comenzara.

De todos modos, en tu caso, tal vez algo similar ayudaría. Puede intentar agregar una nueva columna bigint, actualizar la nueva columna en lotes y luego establecer las restricciones en ella.