sql - 如何提高 SQL Server 中合并语句的性能
问题描述
我必须在具有以下要求的 SQL Server DB 上执行合并语句。
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 秒,因为我必须为 50K+ 记录执行此语句。
由于我不太了解 SQL,我们是否有任何选项可以提高此查询的性能?
谢谢你。
解决方案
推荐阅读
- jboss - 无法在 Keycloak 4.6.0.Final 中设置 IDP 令牌交换
- java - 如何获取我的字符串在 Java 中被分割的内容并将其保存到列表中?
- python - 将数据帧合并到多索引数据帧
- c# - 如何从 C# 中 ASP.NET 中的代码中检索多选模式下的绑定列表框?
- powershell - 术语“EXEC”未被识别为 cmdlet Powershell 的名称
- tabulator - 如何在制表符中显示选择编辑器文本但不显示值
- python - 浮动对象不可下标(python)
- node.js - 如何在没有管理员权限的情况下在 Windows 上更新 npm 和 NodeJS?
- php - 显示图像时出现错误 ERR_EMPTY_RESPONSE
- postgresql - 计算 AVG;输出高于平均水平的