Сколько нужно времени, чтобы вставить миллион строк в sql2005? - PullRequest
1 голос
/ 02 августа 2011

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

Я извлекаю 1 000 000 строк размером 99 байт из базы данных SQL2K в базу данных SQL2005 на том же экземпляре сервера.

В исходной таблице есть индексы.в плане выполнения указано <missing index> ????

В таблице назначения нет индексов.

Запрос занимает около 1 минуты.Это кажется действительно очень длинным .... учитывая, что это просто insert into

INSERT INTO EDW.STAGE.DESTINATION SELECT AccountNumber, CardNumber, FiscalYear, SeqNumber,Category,DateSaved, FullLandValue, FullBuildingValue, TotalValue, ValueExemption,TaxableTotal,DataPreAssesGeneralID,getdate(),2010 FROM SOURCE WHERE FiscalYear = 2010

Могу поспорить, есть способ ускорить это ... но как?

Обновление

На самом деле это динамический оператор SQL.для краткости я только показываю сгенерированную строку.Я проверил оператор как динамический по сравнению с t-SQL, и время выполнения было идентичным.

Ответы [ 5 ]

1 голос
/ 02 августа 2011

Попробуйте использовать Bulk Insert. http://msdn.microsoft.com/en-us/library/ms188365.aspx

1 голос
/ 02 августа 2011

Есть ли у вас кластерный индекс FiscalYear в исходной таблице? Или некластеризованный индекс покрытия?

Сколько времени занимает SELECT сам по себе?

Есть ли триггеры в таблице назначения?

Предполагается, что используется связанный сервер, какая защита используется?

Или это база данных в базе данных в одном экземпляре? Если да, обновлялась ли статистика в исходной базе данных после ее добавления в экземпляр

1 голос
/ 02 августа 2011

Это может занять некоторое время в зависимости от многих вещей (индексы, индексированные представления, использующие таблицу, внешние ключи, оборудование и т. Д.) *

Вы можете попробовать использовать массовую вставку, которая оптимизирована для такого рода вещей, но вы должны загрузить данные для файла, но это довольно просто, вы даже можете сделать это из графического клиента

1 голос
/ 02 августа 2011

Вы упоминаете индексы в таблице назначения, но не в источнике.Если исходная таблица не имеет некластеризованного индекса в столбце FiscalYear, добавьте его.Это должно ускорить внутренний запрос (SELECT).

Кроме того, вы можете включить другие столбцы, которые вы выбираете в индексе, чтобы исключить поиск ключа из плана выполнения.(Если столбцы в операторе SELECT представляют все столбцы в таблице, возможно, лучше будет кластеризованный индекс в столбце FiscalYear, но это может помешать существующему первичному ключу, если он есть.)

Или вы всегда можете увеличить аппаратную часть на коробке, но это может быть излишним для оптимизации оператора INSERT.

Редактировать:

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

0 голосов
/ 02 августа 2011

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

Чем быстрее компоненты, тем быстрее выполняется запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...