Какой самый быстрый способ ВСТАВИТЬ множество данных из одной таблицы в другую? (SQL сервер 2005)

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

Мой текущий подход - это очевидный INSERT/SELECT:

set identity_insert TargetDBName.dbo.TableName on

insert into TargetDBName.dbo.TableName ([FieldsList])
  select [FieldsList] from  TargetDBName.dbo.TableName    

set identity_insert SourceDBName.dbo.TableName off

Что занимает, примерно, целую вечность (1 час на 10 миллионов записей, при этом из таблицы с индексами в таблицу без них ушло 20 минут).

Как лучше всего это сделать?

Спасибо!


person Community    schedule 05.06.2009    source источник


Ответы (2)


Я считаю, что ваши индексы будут пересчитываться при каждой вставке, вам следует попробовать отключить индексы, выполнить массовую вставку, а затем снова включить их. Посмотрите, работает ли это

----Disable Index
ALTER INDEX [*INDEX_NAME*] ON *TABLE_NAME* DISABLE
GO
----Enable Index
ALTER INDEX [*INDEX_NAME*] ON *TABLE_NAME* REBUILD
GO
person Adam Fox    schedule 05.06.2009
comment
Возможно, вы захотите отформатировать это немного лучше, прямо сейчас все, что выше второго ALTER INDEX, будет закомментировано. - person Brian Sullivan; 05.06.2009
comment
Я согласен... отключите или удалите/добавьте индексы к месту назначения во время загрузки. - person Zachary; 05.06.2009

Проверьте это на StackOverflow

Это должно помочь вам вставлять данные в куски по 1000. Мне также нравится «идея отключения индекса».

person Eric    schedule 05.06.2009