sql - 相关子查询中的案例表达式降低性能
问题描述
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 秒即可检索。我还缺少其他东西吗?
编写此案例表达式的最佳方法是什么?
解决方案
由于您的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()
一个然后检查改进。
推荐阅读
- c - void* 与 char* 具有相同的表示和内存对齐是什么意思?
- python - 如何定义输入为列名的函数?
- windows - 拒绝连接到“blob:http://XXX”,因为它违反了以下内容安全策略指令:“connect-src 'self'
- node.js - 仅 http cookie Node.js,React 的会话管理问题
- php - json 文件到 mysql 数据库插入为“数组”的列
- aws-lambda - AppSync 与 AWS4 和混合身份验证类型(UserPools 和 IAM)
- firebase - Firebase 扩展删除用户数据不适用于 {DEFAULT} 存储桶
- javascript - 将动态布尔属性传递给 VueJS 组件
- asterisk - 如何在数据库中保存带星号的事件
- ssl - 路由器将自己的 SSL 证书而不是我的域提供给 LAN 主机