sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server prestanda för ändra tabell ändra kolumn ändra datatyp

Av en slump var jag tvungen att göra något väldigt liknande för ca 3 timmar sedan. Bordet var 35 m rader, det är ganska brett och det tog en evighet att bara göra det här:

alter table myTable add myNewColumn int not null default 0;

Det här är vad jag slutade med:

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;

Den här gången, alter table uttalanden var nästan omedelbara. Det tog cirka 7-8 minuter (på en långsam server) att göra uppdateringsbatcherna. Jag spekulerar i att SQL Server genererade ångra i min ursprungliga fråga för att återställa värdena, men jag förväntade mig inte att det började.

Hur som helst, i ditt fall kanske något liknande skulle hjälpa. Du kan prova att lägga till en ny bigint-kolumn, uppdatera den nya kolumnen i omgångar och sedan ställa in begränsningarna för den.



  1. Hur man automatiskt ökar alfanumeriskt värde i postgresql?

  2. MySQL tar inte bort poster

  3. Infoga rader (förälder och underordnade) programmatiskt

  4. Lägg till unik begränsning baserat på fältvärde