Cra*_*ger 24 postgresql optimization sql-standard
我看到频繁引用WITH查询(公共表表达式,或 CTE)充当优化栅栏,服务器不允许将过滤器下推到 CTE 查询中,将公共表达式从 CTE 中拉出等。它经常被声称成为 SQL 标准要求的行为。
CTE绝对是PostgreSQL 中的优化栅栏……但这是标准要求的,还是实际上只是实现细节?
例如,这些邮件列表帖子声称或建议它是标准的:
在评论中提到它之后,我被问到它的指定位置 - 在查看了 SQL:2008 的唯一草案后,我可以访问我并没有太多运气找到它。
我还没有深入研究标准,所以我希望有人提出建议:标准实际上是否需要PostgreSQL中CTE的优化围栏?如果是这样,它在哪里指定?还是 Pg 邮件列表上的陈述有误?
另见todo list上的线程CTE优化围栏?.
Mik*_*ll' 10
我认为这是一个实现细节。
一致的实现不需要执行通用规则中定义的确切操作序列,前提是它对 SQL 数据和模式、主机参数和主机变量以及 SQL 参数和 SQL 变量的影响与此相同序列。术语有效地用于强调可以通过实现以其他方式实现效果的动作。1
我认为一个实现者可以对一个公用表表达式求值 20 次,即使以 20 种不同的方式,仍然有一个一致的实现。唯一相关的问题是“其效果……与通用规则中定义的一系列动作的效果是否相同”。
[1]。第 6.3.3.3 节,“规则评估顺序”,在 SQL 2008 标准草案中,具有本地文件名 5CD2-01-Framework-2006-01.pdf,第 10 页。41 我不知道我从哪里弄来的。谷歌可能知道。
| 归档时间: |
|
| 查看次数: |
2883 次 |
| 最近记录: |