Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql CTE与合并性能_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql CTE与合并性能

Sql CTE与合并性能,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,前言,使用MS SQL Server 2008标准 我正在编写一个应用程序,其中该存储过程代码非常重要,并且会经常被许多用户同时调用 代码的目标是更新整型列,考虑传入的值和整型键上的匹配 从逻辑上讲,我的问题是,当平均项目列表为10项时,哪种方法应该产生最佳性能 我已经分析了这两种查询,它们的性能似乎与我的示例数据相似,但我无法模拟执行的数千个并发查询 存储过程的参数为: @items dbo.KeyValueTable READONLY 其中,KeyValueTable是一种用户定义的类型,

前言,使用MS SQL Server 2008标准

我正在编写一个应用程序,其中该存储过程代码非常重要,并且会经常被许多用户同时调用

代码的目标是更新整型列,考虑传入的值和整型键上的匹配

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

我已经分析了这两种查询,它们的性能似乎与我的示例数据相似,但我无法模拟执行的数千个并发查询

存储过程的参数为:

@items dbo.KeyValueTable READONLY
其中,
KeyValueTable
是一种用户定义的类型,它有两列,
key
value
类型均为
INT

CTE

合并


谢谢大家!

运行这两个命令,同时查看统计io输出和实际计划?为什么只在更新时进行合并?Merge是为在同一语句中执行更新/插入而创建的。@JamesZ两者都相同:CTE执行10次逻辑读取和1次扫描。Merge执行10次逻辑读取和1次扫描。@Dave.Gugg的CPU估计值是相同的。在这种情况下,我只对更新函数感兴趣。合并还可以处理删除。为什么?因为我想对一组数据而不是RBAR进行更新。如果其中一个部分导致我对承诺数量的限制失效,我也希望整个声明失效。这就像吃饭时用烤箱手套拿起叉子一样。你能做到,但为什么?在这种情况下不要使用Merge,这是不必要的。
    ;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 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;