【发布时间】:2021-01-18 21:50:45
【问题描述】:
如果我编写一个包含 CTE 的 SQL 语句,查询优化器是否总是将这些 CTE 作为离散语句保留以单独优化,或者如果计算结果 SQL 会更快,它是否可以将这些 CTE 与整个 SQL 的其他部分合并执行?
这个问题是由另一个用户提出的问题触发的。他们在 CTE 中使用序列生成器;当 CTE SQL 单独运行时,它总是产生 12 个连续的数字,正如预期的那样。但是,当在 CTE 中作为更大 SQL 语句的一部分运行时,它缺少数字,即它没有产生连续的值。
这是大型数据集的一个已知问题/行为,但由于只有 12 个值,它不应该成为问题 - 但事实表明 CTE 没有按书面规定运行,有 12 条记录结果集随后连接到其他表,但查询优化器改写了整个查询并将 CTE 逻辑与 SQL 语句的其他部分合并,因此产生了更大的数据集。
【问题讨论】:
-
使用
explain查看 Snowflake 可能正在运行的内容。
标签: sql snowflake-cloud-data-platform common-table-expression