首页 > 解决方案 > 当使用 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 语句的原因。

标签: sqlamazon-redshift

解决方案


这两个查询不做同样的事情,除非fieldB是统一的1(或统一的1时候fieldA不是NULL)。通常,您应该运行执行您真正需要的查询。

Redshift 是一个列式数据库。这意味着查询中使用的每一列都会增加执行开销。

因此,如果可以,最好避免阅读专栏。当然,如果在查询的其他地方引用了该列,则这不适用。

此外,SUM()对数字进行操作。我不确定“二进制”是否意味着该值是一个数字。如果不是,则需要对其进行转换,这也增加了开销。


推荐阅读