首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snowflake查询优化器是否尊重CTE?

问Snowflake查询优化器是否尊重CTE?
EN

Stack Overflow用户
提问于 2021-01-18 21:36:56
回答 1查看 214关注 0票数 0

如果我编写一条包含CTE的SQL语句,查询优化器是否总是将这些CTE作为离散语句单独优化,或者,如果计算得到的SQL执行速度更快,它是否可以将这些CTE与整个SQL的其他部分合并?

这个问题是由另一个用户提出的问题触发的。他们在CTE中使用序列生成器;当CTE SQL独立运行时,它总是生成12个连续的数字,正如预期的那样。然而,当在CTE中作为更大的SQL语句的一部分运行时,它会丢失数字,即它不会生成连续的值。

这是一个大型数据集的已知问题/行为,但由于只有12个值,这不应该是一个问题-但事实是,CTE并没有像写的那样运行,12条记录的结果集然后连接到其他表,而查询优化器重写了整个查询,并将CTE逻辑与SQL语句的其他部分合并,因此产生了一个更大的数据集。

EN

回答 1

Stack Overflow用户

发布于 2021-01-18 21:50:45

Snowflake没有提供很多关于它如何优化查询的解释。

我可以说,一般来说,有两种方式来处理CTE:

  • 实体化CTE,因此它只运行一次,然后实体化版本将CTE逻辑read.
  • Incorporate到查询的其余部分中,并将其作为查询的一部分进行优化。

实际上,我希望Snowflake两者都能做到,选择更好的执行计划,因为它是一个现代数据库,已经从几十年的优化经验中学到了东西。在某些情况下,这两种方法都可能更好。

话虽如此,如果代码返回的数据按照您的描述进行了更改,那么就存在一个bug。优化的要点不是改变代码的语义(意思)。重点是返回相同的结果,但使用不同的底层算法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65775586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档