Сервер Sql вставляет тайм-аут - PullRequest
2 голосов
/ 27 апреля 2011

Я пытаюсь вставить несколько строк в простую таблицу в Sql Server 2008. Таблица не имеет никаких индексов, кроме первичного ключа.

Я делаю вставки следующим образом

insert into TestTable 
(Col1,Col2, Col3,Col4, Col5)
select 1,1,1,1,GETDATE()
union all
select 1,2,3,1,GETDATE()
union all
select 1,5,2,1,GETDATE()
union all
select 1,4,15,1,GETDATE()

Если я делаю это для большого количества строк (скажем, 400) и запускаю операцию несколько раз, Операция вставки начинает занимать огромное количество времени.

Есть ли способ дальнейшей оптимизации вкладышей?

Ответы [ 4 ]

2 голосов
/ 27 апреля 2011
insert into TestTable (Col1,Col2, Col3,Col4, Col5)
VALUES (1,1,1,1,GETDATE()), (1,1,1,1,GETDATE()), (1,1,1,1,GETDATE()), ...
0 голосов
/ 27 апреля 2011

Вероятно, это время компиляции, а не время выполнения.

Если у вас 400 одинаковых строк, сгенерируйте 400 строк first

insert into TestTable 
   (Col1,Col2, Col3,Col4, Col5)
select
   1,1,1,1,GETDATE()
FROM
   (SELECT TOP 400 * FROM master.dbo.spt_values ORDER BY 1) foo
0 голосов
/ 27 апреля 2011

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

0 голосов
/ 27 апреля 2011

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

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