SQL WHILE Цикл медленный с вставкой в.Есть ли способ ускорить запрос?
Я хочу вставить 500 000 строк.Если после каждых 10000 строк будет коммит, будет ли он быстрее?
Пример:
Вставить строки из DB1 в DB2 и получить первичный идентификатор ключа автокремента из DB2 в DB1.
CREATE TABLE #TempTable
(
ROWID int identity(1,1) primary key,
Comp_Key_1 NVARCHAR(20),
Comp_Key_2 NVARCHAR(256),
Comp_Key_3 NVARCHAR(256)
)
INSERT INTO #TempTable (Comp_Key_1, Comp_Key_2, Comp_Key_3)
SELECT Comp_Key_1, Comp_Key_2, Comp_Key_3 FROM [DB1].[dbo].FILES
DECLARE @MAXID INT, @Counter INT, @Comp_Key_1 NCHAR(20), @Comp_Key_2 nvarchar(256), @Comp_Key_3 nvarchar(256), @id_current int,;
SET @COUNTER = 1
SELECT @MAXID = COUNT(*) FROM #Temp
WHILE (@COUNTER <= @MAXID)
BEGIN
set @Comp_Key_1= (select Comp_Key_1_doc from #Temp where ROWID= @COUNTER)
set @Comp_Key_2= (select Comp_Key_2_doc from #Temp where ROWID= @COUNTER)
set @Comp_Key_3= (select Comp_Key_3_doc from #Temp where ROWID= @COUNTER)
INSERT INTO [DB2].[dbo].[ADDRESS] (STREET,STREET_FROM,STREET_TO)
SELECT STREET,STREET_FROM,STREET_TO
FROM [DB1].[dbo].[ADDRESS]
WHERE [DB1].[dbo].[ADDRESS].Comp_Key_1= @Comp_Key_1
and [DB1].[dbo].[ADDRESS].Comp_Key_2=@Comp_Key_2
and [DB1].[dbo].[ADDRESS].Comp_Key_3=@Comp_Key_3;
set @id_current = IDENT_CURRENT('[DB2].[dbo].[ADDRESS]')
update [DB1].[dbo].[ADDRESS]
set id=@id_current
where @Comp_Key_1=[ADDRESS].Comp_Key_1
and @Comp_Key_2=[ADDRESS].Comp_Key_2
and @Comp_Key_3=[ADDRESS].Comp_Key_3;
SET @COUNTER = @COUNTER + 1
END
COMMIT
У DB2 есть первичный ключ автокремента, который нужно перенести в DB1 после каждой вставленной строки.DB1 имеет составной ключ из 3 столбцов.Дизайн DB2 не включает составной ключ.
пример таблиц
Есть ли способ ускорить вставку?