CTE与合并绩效

时间:2015-10-21 15:39:51

标签: sql sql-server sql-server-2008

前言,使用 MS SQL Server 2008标准

我正在编写一个应用程序,其中存储过程代码很关键,并且很多用户会同时调用它。

代码的目标是更新整数列,同时考虑传入的值并匹配整数键。

我的问题是,从逻辑上讲,当平均项目列表为10时,哪种方法应该会产生最佳性能。

我已对两者进行了分析,但它们似乎与我的示例数据具有相似的性能,但我无法模拟数千个并发查询的执行。

存储过程采用以下参数:

@items dbo.KeyValueTable READONLY

其中KeyValueTable是用户定义的类型,其中包含keyvalue两列,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;

谢谢!

0 个答案:

没有答案