sql - 当使用 case 语句聚合 redshift 中的字段时,用 1 和 0 替换二进制字段是否更高效?
问题描述
例如,以下哪个计算应该执行得更快?
sum (
case
when fieldA is not null
then 1
else 0
end ) total
或者
sum (
case
when fieldA is not null
then fieldB -- binary field, 1 or 0.
end ) total
为了这个示例,假设当 fieldA 不为 null 时,fieldB 将始终等于 1。如果 fieldA 为 null,则 fieldB 也可以等于 1,这就是我使用 case 语句的原因。
解决方案
这两个查询不做同样的事情,除非fieldB
是统一的1
(或统一的1
时候fieldA
不是NULL
)。通常,您应该运行执行您真正需要的查询。
Redshift 是一个列式数据库。这意味着查询中使用的每一列都会增加执行开销。
因此,如果可以,最好避免阅读专栏。当然,如果在查询的其他地方引用了该列,则这不适用。
此外,SUM()
对数字进行操作。我不确定“二进制”是否意味着该值是一个数字。如果不是,则需要对其进行转换,这也增加了开销。
推荐阅读
- sql-server - MSSQL:如果行不存在,HOLDLOCK 如何工作?
- python - Python 到 Teradata 日期问题
- java - Java Jar 导入失败
- excel - 如何在条件下获取特定行的百分比排名?
- azure-devops-server - Azure DevOps Server 2020 更新 1 将 XML 文件添加到拉取请求评论
- data-integration - 在数据集成之前我需要一些数据字段映射工具
- python - 如何在不隐藏任务栏的情况下使 matplotlib 屏幕全屏 - Python
- linux - 复制初始全局偏移表
- java - 卡在这个JAVA多维数组问题有一段时间了,请帮帮我
- exchange-server - 兑换:使用任务计划程序时出错