【问题标题】:SQL Server: Curious about performance impact of this SQL statementSQL Server:好奇这条 SQL 语句对性能的影响
【发布时间】:2011-07-13 23:08:31
【问题描述】:

我有以下 SQL 语句:

WITH w1 AS (SELECT [Number] AS v1 FROM [MyTable] WHERE <condition>)
SELECT
  SUM(CASE WHEN v1 < @Value THEN v1 ELSE @Value END)
FROM
  w1;

我只是好奇,如果 MyTable 包含 10 条匹配 to 的记录,执行上面的 SQL 语句时该语句会被处理多少次?

【问题讨论】:

    标签: sql sql-server performance select common-table-expression


    【解决方案1】:

    这将被内联并像你写的一样对待

    SELECT SUM(CASE WHEN [Number] < @Value THEN [Number] ELSE @Value END)
    FROM [MyTable] 
    WHERE <condition>
    

    【讨论】:

    • 谢谢。好吧,从技术上讲,[Number] 部分并不那么容易。在此处查看整个 SQL 语句:dl.dropbox.com/u/31368633/sql_query_001.txt 这只是 ASP NET 脚本生成的内容的快照。那么知道是否可以优化吗?
    【解决方案2】:

    执行计划很可能是为每一行计算一次标量,然后进行聚合。 w1 将被查询一次以获得所有匹配值。

    【讨论】:

    • 所以你是说它不会每次执行两次,对吧?
    • @ahmd0 不,CTE 只定义了一个模式。实际执行取决于select。在select,你只查询一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多