2017-02-09 2 views
0

Мне было предложено изучить ручную процедуру, которую каждый из моих коллег постоянно делает.Добавление столбцов - таблицы SQL Server

Ему иногда нужно добавить новый столбец на большой стол (200 миллионов строк), для этого требуется более 1 часа. Прежде чем спросить, да, столбцы имеют значение NULL, но иногда новый столбец будет содержать 90% данных.

Вместо добавления нового столбца в существующую таблицу, он ...

  1. создает новую таблицу
  2. Select (*) из старой таблицы (вставляет новый)
  3. Добавляет новый колонка в качестве части его сценария

Затем он удаляет старую таблицу и переименовывает новую таблицу обратно в исходное, добавляет индекс и затем сжимает. Он говорит это гораздо быстрее.

Если это лучший способ, то я постараюсь написать пакет SSIS, чтобы попытаться сделать процесс более цельным

Любые советы приветствуются!

Благодаря

+0

Обновлена ​​ли исходная таблица? –

+0

Да - исходная таблица обновляется ежемесячно прямо сейчас, но скоро изменится на еженедельно – Easy987us

+0

Почему вы так часто добавляете новый столбец? Вероятно, это можно было бы лучше решить, слегка изменив структуру данных на что-то более нормализованное. Можете ли вы опубликовать определение таблицы и причины появления новых столбцов? – iamdave

ответ

0

создания новой структуры таблицы и переместить все данные в эту таблицу и удалить до таблицы является хорошим способом только несколько данных, вы можете сделать это с помощью мастера в SQL Server.
, но это самый худший способ решить эту проблему (миллионы данных).

для большого объема данных (миллионы записей) вы должны использовать «Таблицу изменений».

Alter Table MyTable
ADD NewColumn nvarchar(10) null

новый столбец будет добавлен к таблице в последнем столбце. , если вы используете этот скрипт, требуется меньше одной секунды, потому что все данные не будут перемещаться, вы просто добавляете новый столбец в таблицу.

, но если вы используете метод мастера, как вы упомянули с миллионами данных, требуется несколько часов.

0

, как Али говорит

alter Table MyTable ADD NewColumn nvarchar(10) null

но затем залить 90% данных. Как у него есть стол уже с ним и ключ он присоединится на в копии, так что это все, что ему нужно:

UPDATE MyTable 
SET [NewColumn] = b.[NewColumn] 
FROM MyTable a INNER JOIN NewColumnTable b ON a.[KeyField]= b.[KeyField] 

будет намного быстрее. Вы можете сделать это в SSIS, но если это произойдет много, то на самом деле это не стоит для нескольких строк SQL.

Смежные вопросы