SAP HANA性能优化(3)——UNION相关优化

 HANA每一个运算节点都有存在优化的可能,这次先来看看union相关优化。

用合适的方法替代UNION

由于列引擎不原生支持UNION ALL、UNION、INTERSECT和EXCEPT操作,避免使用它们可能会提高性能。

下面是示例,展示了如何避免使用UNION、INTERSECT和EXCEPT。请注意,这些示例中的转换通常不适用于一般情况。只有在感兴趣的列中没有空值时,这些转换才有效。对于INTERSECT和EXCEPT,如果所有感兴趣的列都显式声明了NOT NULL约束,则SQL优化器会自动应用这些转换:

注意:UNION ALL通常比UNION更快,因为它不需要进行集合比较。如果可以接受重复值或者你知道不会有重复值,应优先选择UNION ALL

原始代码:

SELECT a, b FROM T

UNION

SELECT a, b FROM S;

推荐代码:

SELECT DISTINCT

    COALESCE(T.a, S.a) a,

    COALESCE(T.b, S.b) b

FROM T FULL OUTER JOIN S

    ON T.a = S.a AND T.b = S.b;

原始代码:

SELECT a, b FROM T 

INTERSECT

SELECT a, b FROM S;

推荐代码:

SELECT DISTINCT T.a a, T.b b

FROM T JOIN S ON T.a = S.a AND T.b = S.b;

原始代码:

SELECT a, b FROM T

EXCEPT

SELECT a, b FROM S;

推荐代码:

SELECT DISTINCT T.a a, T.b b

FROM T WHERE NOT EXISTS

(SELECT * FROM S

WHERE T.a = S.a AND T.b = S.b);

使用UNION Pruning

假设存在历史数据和当前数据存在不同的表,在特定的场景下以不同的年份进行区分,那么可以做一个配置表,使用配置表对数据进行配置,访问不同时间区间的数据,可以提高访问效率。

PA教程相关说明

还有另外一种UNION Pruning的方法,直接在管理匹配的关系中定义一个常量。

在代码中的区别,一个是加了WHERE FLAG='CURRENT',另一个没有加,时间上性能提升是非常明显的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值