首页 > 解决方案 > 相关子查询中的案例表达式降低性能

问题描述

SUM((CASE WHEN ([t2].[__measure__8] > 1) THEN (CASE WHEN [t2].[__measure__8] = 0 THEN NULL ELSE (CAST([t2].[__measure__9] as float) / [t2].[__measure__8]) END) ELSE [t2].[__measure__9] END))

当我在 Correlated Subquery 上面使用这个计算时,它也有一个 group by。接收结果集需要 5 分钟以上。此外,查询的内部子集只需 4 秒即可检索。我还缺少其他东西吗?

编写此案例表达式的最佳方法是什么?

标签: sqlsql-servertsql

解决方案


由于您的case语句只有 1 个条件,我建议改用iif函数。

sum(
    iif([t2].[__measure__8] > 1,
        iif([t2].[__measure__8] = 0, null, cast([t2].[__measure__9] as float)/[t2].[__measure__8]),
    [t2].[__measure__9])
)

尝试使用 分解您的查询subqueries,删除第sum()一个然后检查改进。


推荐阅读