Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Променете типовете колони в огромна таблица

В зависимост от промяната, която правите, понякога може да е по-лесно да вземете прозорец за поддръжка. По време на този прозорец (където никой не трябва да може да променя данните в таблицата) можете:

  1. изхвърлете всички индекси/ограничения, сочещи към старата колона, и деактивирайте задействанията
  2. добавете нов нулеви колона с новия тип данни (дори ако е предназначена да НЕ е NULL)
  3. актуализирайте новата колона, като я зададете равна на стойността на старата колона (и можете да направите това на части от отделни транзакции (да речем, засягайки 10 000 реда наведнъж, като използвате UPDATE TOP (10000) ... SET newcol = oldcol WHERE newcol IS NULL ) и с CHECKPOINT, за да избегнете прехвърляне на вашия дневник)
  4. след като всички актуализации са готови, махнете старата колона
  5. преименувайте новата колона (и добавете ограничение NOT NULL, ако е подходящо)
  6. изградете отново индекси и актуализирайте статистиката

Ключът тук е, че ви позволява да извършвате актуализацията постепенно в стъпка 3, което не можете да направите с една команда ALTER TABLE.

Това предполага, че колоната не играе основна роля за целостта на данните - ако е замесена в куп връзки с външни ключове, има повече стъпки.

РЕДАКТИРАНЕ

Освен това и просто се чудя на глас, не съм правил никакви тестове за това (но го добавям към списъка). Чудя се дали компресирането на страница + ред ще помогне тук? Ако промените INT на BIGINT, с компресия SQL Server трябва да третира всички стойности така, сякаш все още се вписват в INT. Отново, не съм тествал дали това ще направи промяната по-бърза или по-бавна или колко повече време ще отнеме, за да се добави компресия на първо място. Просто го изхвърлям.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите списък с таблици без ограничение на първичен ключ във всички бази данни на екземпляр на SQL Server - SQL Server / TSQL урок, част 62

  2. Как да конвертирате колоната за времеви отпечатъци на SQL Server във формат дата и час

  3. SQL cast datetime

  4. Какво представлява схемата в SQL Server и как да създадете/препуснете схема в базата данни на SQL Server - SQL Server / TSQL урок, част 27

  5. Как да актуализирате статистиката на SQL Server за големи таблици