Hologres这个语句为啥走不到fixed plan,pk1+pk2是完整的主键,改写为select语句是可以走fixed plan的?
UPDATE
public.table_name
SET
tags = CASE WHEN array_contains (tags, '22222') THEN
tags
ELSE
ARRAY_APPEND(tags, '22222')
END
WHERE
pk1 = xx
AND pk2 = xx;
应该是set里有函数计算,array_contains和array_append ,此回答整理自钉群“实时数仓Hologres交流群”
Hologres是一个列式存储的分布式数据库,它使用列存索引来加速查询和更新操作。在给定的UPDATE语句中,使用了CASE语句和ARRAY_APPEND函数来修改tags数组。由于CASE语句和ARRAY_APPEND函数涉及到对多行数据的修改,因此Hologres无法直接走行存索引。
然而,当将UPDATE语句改写为SELECT语句时,Hologres可以走fixed plan。这是因为在SELECT语句中,Hologres可以直接访问到目标行的tags数组,而不需要遍历整个表。这样,Hologres就可以利用列存索引来提高查询性能。
以下是改写后的SELECT语句:
SELECT
tags
FROM
public.table_name
WHERE
pk1 = xx
AND pk2 = xx;
在这个SELECT语句中,Hologres可以直接访问到目标行的tags数组,并利用列存索引来提高查询性能。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975