对于具有多个表的复杂查询,哪种方法更好?公用表表达式还是子查询?Amazon Redshift:复杂查询的CTE或子查询?
回答
子查询比使用通用表表达式要好得多。使用多个子查询而不是通用表表达式时,查询分析器的性能会更好。
我不同意这个答案。我是一个新的Redshift用户,但我写了两个非常简单的查询,一个用CTE,另一个用子查询。当我检查解释计划时,它们都是完全一样的! 虽然它可能会在其他DBS中做出一些区别,但在Redshift中,似乎编译器对两者的评估方式都是相同的。所以这是您编写代码的个人选择。 – 2017-11-15 01:46:39
但是请注意,重写外连接要比使用相关子查询要好得多。由于Redshift中没有索引,因此强制对每一行数据执行子查询将导致运行成本非常高昂的O.
简单的子查询不使用来自外部查询的值,并且只计算一次!所以,它不会以O(n2)操作结束。 – untitled 2015-02-10 10:42:14
完全同意你的观点:简单的子查询。作者没有具体说明其中一种方式(尽管作为与CTE的比较,隐含简单的子查询是正确的)。鉴于_correlated_ sub-queries的巨大负面影响,我认为谨慎突出这个问题。 – DogBoneBlues 2015-02-11 15:29:16
我会说临时表。在临时表中,您可以定义DIST KEY并控制性能。 CTE可能表现不佳
- 1. CTE对于复杂查询
- 2. 复杂的查询使用CTE
- 3. 复杂的SQL查询或查询
- 4. SQL:查询复杂的子查询
- 5. Django查询api:复杂子查询
- 6. Group_concat具有复杂的查询或子查询输出?
- 7. GRANT中的Redshift子查询
- 8. nhibernate QueryOver - 复杂子查询
- 9. 复杂查询
- 10. 复杂查询
- 11. 复杂查询
- 12. 行为CTE子查询的
- 13. 子查询中的CTE
- 14. DB2子查询中的CTE
- 15. 通过PHP查询Amazon Redshift数据库
- 16. 优化对于CTE或子查询
- 17. cassandra上的复杂查询
- 18. 复杂的SQL查询查询
- 19. DQL复杂的查询,嵌套查询
- 20. 复杂的SQL查询 - 嵌套查询
- 21. MySQL查询优化复杂的查询
- 22. 在CTE查询
- 23. 从CTE查询
- 24. MySQL复杂查询
- 25. SQL复杂查询
- 26. (复杂?)LINQtoSQL查询
- 27. Strongloop复杂查询
- 28. 复杂Laravel查询
- 29. MongoMapper复杂查询
- 30. SQL查询复杂
IIRC红移基于(剥离?)pre-8.4 postgres版本,因此它不具有* CTE。这使得选择更容易。 – wildplasser 2015-02-07 17:31:33
Redshift支持CTE(带子句)。请参阅Redshift文档[这里](http://docs.aws.amazon.com/redshift/latest/dg/r_WITH_clause.html) – DogBoneBlues 2015-02-11 15:25:15