Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wydajność programu SQL Server w przypadku zmiany typu tabeli, zmiany kolumny, zmiany typu danych

Przypadkowo musiałem zrobić coś bardzo podobnego jakieś 3 godziny temu. Stół miał 35 m rzędów, jest dość szeroki, a wykonanie tego zajęło wieczność:

alter table myTable add myNewColumn int not null default 0;

Oto, z czym skończyłem:

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;

Tym razem alter table oświadczenia były niemal natychmiastowe. Wykonanie partii aktualizacji zajęło około 7-8 minut (na wolnym serwerze). Spekuluję, że SQL Server generował cofanie w moim pierwotnym zapytaniu, aby przywrócić wartości, ale nie spodziewałem się, że to zacznie się.

Zresztą w twoim przypadku może pomogłoby coś podobnego. Możesz spróbować dodać nową kolumnę bigint, zaktualizować nową kolumnę partiami, a następnie ustawić na niej ograniczenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wyróżnić słowo w widoku siatki?

  2. sqlsrv_connect:Nie znaleziono nazwy źródła danych i nie określono domyślnego sterownika

  3. Dlaczego tworzysz widok w bazie danych?

  4. używanie funkcji Object_id() z #tables

  5. serwer sql, kaskadowe usuwanie i tabela nadrzędna/podrzędna