Сравнение производительности между пакетным слиянием и табличными параметрами - PullRequest
0 голосов
/ 10 ноября 2019

Я бы хотел оптимизировать текущий пакет слияния для сотен тысяч сущностей, используя JDBC 7 и MSSQL 2014.

Синтаксис подготовленного оператора выглядит примерно так:

BEGIN
DECLARE @field1 type1 = ?;
DECLARE @field2 type2 = ?;
MERGE INTO dbo.target_table AS TARGET
USING (SELECT __field1 = @field1, __field2 = @field2) AS SOURCE
ON (TARGET.field1 = SOURCE.__field1)
WHEN MATCHED THEN UPDATE SET field1 = @field1, field2 = @field2
WHEN NOT MATCHED BY TARGET THEN INSERT (field1, field2) VALUES (@field1, @field2);
END

Затем программа связывает значения POJO с объявленными выше переменными.

После прочтения документации SQL Server кажется, что пакетный оператор будет выполняться отдельно на стороне сервера, более того, каждое объединение требует полного поиска в таблице, что можетпривести к длительному времени ожидания.

Интересно, могу ли я оптимизировать процесс, используя DECLARE @my_table_var table(field1 type1, field2 type2), вставляя данные в этот @my_table_var, а затем выполняя слияние, например:

MERGE INTO dbo.target_table AS TARGET
USING @my_table_var AS SOURCE
ON (TARGET.field1 = @my_table_var.field1)
WHEN MATCHED THEN UPDATE SET TARGET.field1 = @my_table_var.field1, TARGET.field2 = @my_table_var.field2
WHEN NOT MATCHED BY TARGET THEN INSERT (field1, field2) VALUES (@my_table_var.field1, @my_table_var.field2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...