#sql #sql-server #performance #merge #query-optimization
#sql #sql-сервер #Производительность #слияние #оптимизация запросов
Вопрос:
Я должен выполнить оператор слияния в базе данных SQL Server с приведенным ниже требованием.
MERGE INTO dbo.cross_charge D
USING
(
SELECT
PROJECT_CODE
, CROSS_CHARGE_OU
FROM
dbo.cross_charge
WHERE
PROJECT_CODE = #PROJECT_CODE1
AND CROSS_CHARGE_OU = #CROSS_CHARGE_OU1
) S
ON (
D.PROJECT_CODE = S.PROJECT_CODE
AND D.CROSS_CHARGE_OU = S.CROSS_CHARGE_OU
)
WHEN MATCHED THEN UPDATE SET
D.PROJECT_CODE = #PROJECT_CODE3
, D.CROSS_CHARGE_OU = #CROSS_CHARGE_OU3
, D.CROSS_CHARGE_START = #CROSS_CHARGE_START1
, D.CROSS_CHARGE_END = #CROSS_CHARGE_END1
, D.IS_Enable = #IS_Enable1
, D.UpdatedDate = #UpdatedDate1
WHEN NOT MATCHED THEN INSERT
(
PROJECT_CODE
, CROSS_CHARGE_OU
, CROSS_CHARGE_START
, CROSS_CHARGE_END
, IS_Enable
, UpdatedDate
)
VALUES
(
#PROJECT_CODE2, #CROSS_CHARGE_OU2, #CROSS_CHARGE_START, #CROSS_CHARGE_END, #IS_Enable, #UpdatedDate
)
Я должен передать Project_code и cross_charge_ou в качестве входного параметра, и на основе выбранного результата он либо вставит, либо обновит запись.
Когда я выполняю этот запрос для 100 записей, это занимает 35 секунд, что слишком много, поскольку я должен выполнить этот оператор для более чем 50 тыс. записей.
Есть ли у нас какие-либо варианты для повышения производительности этого запроса, поскольку я не очень разбираюсь в SQL?
Спасибо.
Комментарии:
1. Я бы предположил, что вам следует использовать конструктор значений таблицы в вашем
USING
, а не запрашивать ту же таблицу, в которую вы объединяетесь. Не знаю, улучшит ли это производительность.2. вставьте также план выполнения , а также каковы индексы в этих таблицах, а также что вы подразумеваете под # ?
3. Публикация фактического плана выполнения поможет, но, честно говоря, у меня были проблемы с производительностью при слиянии, и я всегда возвращался к выделенным операторам ВСТАВКИ / ОБНОВЛЕНИЯ в транзакции.
4. @eshirvana — # stand в качестве входного параметра, который будет принимать входные данные.. Также SQL server DB обрабатывается отдельной командой, и я понятия не имею об этом .. Не могли бы вы рассказать мне больше о плане выполнения, поскольку я не понял?
5. @KushalKaria вот как отобразить план выполнения