Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Desempenho do SQL Server para alterar o tipo de dados de alteração de coluna de alteração de tabela


Coincidentemente, eu tive que fazer algo muito semelhante cerca de 3 horas atrás. A mesa tinha 35m de linhas, é bastante larga e estava demorando uma eternidade para fazer isso:
alter table myTable add myNewColumn int not null default 0;

Aqui está o que eu acabei indo com:
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;

Desta vez, a alter table declarações foram quase instantâneas. Demorou cerca de 7-8 minutos (em um servidor lento) para fazer os lotes de atualização. Estou especulando que o SQL Server estava gerando desfazer na minha consulta original para restaurar os valores, mas não esperava isso no início.

De qualquer forma, no seu caso, talvez algo semelhante ajude. Você pode tentar adicionar uma nova coluna bigint, atualizar a nova coluna em lotes e definir as restrições nela.