前言,使用 MS SQL Server 2008标准。
我正在编写一个应用程序,其中存储过程代码很关键,并且很多用户会同时调用它。
代码的目标是更新整数列,同时考虑传入的值并匹配整数键。
我的问题是,从逻辑上讲,当平均项目列表为10时,哪种方法应该会产生最佳性能。
我已对两者进行了分析,但它们似乎与我的示例数据具有相似的性能,但我无法模拟数千个并发查询的执行。
存储过程采用以下参数:
@items dbo.KeyValueTable READONLY
其中KeyValueTable
是用户定义的类型,其中包含key
和value
两列,INT
和<{p}}。
CTE
;WITH itemsToCommit
AS (
SELECT i.[key]
,i.value
,s.committedQuantity
FROM dbo.ItemStock s
INNER JOIN @items i ON s.itemId = i.[key]
)
UPDATE itemsToCommit
SET committedQuantity = committedQuantity + [value];
MERGE
MERGE dbo.ItemStock AS t
USING (
SELECT i.[key] AS itemId
,i.value AS quantity
FROM @items i
) AS s(itemId, quantity)
ON t.itemId = s.itemId
WHEN MATCHED
THEN
UPDATE
SET t.committedQuantity = t.committedQuantity + s.quantity;
谢谢!