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

Производителност на SQL Server за промяна на типа на данните за промяна на таблица, промяна на колона

По стечение на обстоятелствата трябваше да направя нещо много подобно преди около 3 часа. Таблицата имаше 35 милиона реда, тя е доста широка и отнемаше цяла вечност, за да направите това:

alter table myTable add myNewColumn int not null default 0;

Ето какво получих в крайна сметка:

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;

Този път, alter table изявленията бяха почти мигновени. Отне около 7-8 минути (на бавен сървър), за да се направят партидите за актуализация. Предполагам, че SQL Server генерира undo в оригиналната ми заявка, за да възстанови стойностите, но не очаквах това да започне.

Както и да е, във вашия случай може би нещо подобно би помогнало. Можете да опитате да добавите нова колона bigint, да актуализирате новата колона на партиди, след което да зададете ограниченията върху нея.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 начина за създаване на таблица на свързан сървър с помощта на T-SQL

  2. Използване на sp_help_schedule в SQL Server

  3. Как да ПОРЪЧАТЕ ПО в SQL PIVOT

  4. PDO sqlsrv:не може да се намери драйвер

  5. Групи за наличност на SQL Server AlwaysOn:Инсталиране и конфигуриране. Част 2