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

Zmień typy kolumn w ogromnej tabeli

W zależności od tego, jakie zmiany wprowadzasz, czasami łatwiej jest zrobić okres konserwacji. W tym oknie (w którym nikt nie powinien mieć możliwości zmiany danych w tabeli) możesz:

  1. upuść wszystkie indeksy/ograniczenia wskazujące na starą kolumnę i wyłącz wyzwalacze
  2. dodaj nowy nullable kolumna z nowym typem danych (nawet jeśli nie ma być NULL)
  3. zaktualizuj nową kolumnę ustawiając ją na równą wartości starej kolumny (możesz to zrobić w kawałkach pojedynczych transakcji (powiedzmy, wpływając na 10000 wierszy na raz za pomocą UPDATE TOP (10000) ... SET newcol = oldcol WHERE newcol IS NULL ) i z CHECKPOINT, aby uniknąć przekroczenia dziennika)
  4. po zakończeniu aktualizacji usuń starą kolumnę
  5. zmień nazwę nowej kolumny (i dodaj ograniczenie NOT NULL, jeśli to konieczne)
  6. odbuduj indeksy i aktualizuj statystyki

Kluczem jest tutaj to, że umożliwia on wykonywanie aktualizacji przyrostowo w kroku 3, czego nie można zrobić w jednym poleceniu ALTER TABLE.

Zakłada to, że kolumna nie odgrywa głównej roli w integralności danych - jeśli jest zaangażowana w szereg relacji kluczy obcych, jest więcej kroków.

EDYTUJ

Poza tym, głośno się zastanawiam, nie przeprowadziłem żadnych testów tego (ale dodałem to do listy). Zastanawiam się, czy pomogłaby tutaj kompresja strona + wiersz? Jeśli zmienisz INT na BIGINT, przy włączonej kompresji SQL Server powinien nadal traktować wszystkie wartości tak, jakby nadal mieściły się w INT. Ponownie, nie testowałem, czy to sprawiłoby, że zmiana byłaby szybsza czy wolniejsza, ani też ile czasu zajęłoby dodanie kompresji w pierwszej kolejności. Po prostu wyrzuć to.



  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 zwrócić podciąg z ciągu w SQL Server za pomocą funkcji SUBSTRING()?

  2. SQL między nie włącznie

  3. Jak zmienić ustawienia konfiguracji poczty bazy danych w programie SQL Server (T-SQL)

  4. Konwertuj „datetime” na „datetime2” w SQL Server (przykłady T-SQL)

  5. Projekt bazy danych:jedna wielka tabela czy osobne tabele?