2010-06-03 72 views
1

请解释。子查询保理问题

a)“子查询分解”用于替换不相关的子查询。相关的子查询呢?有没有办法将相关的子查询移动到“WITH”子句部分?

b)“subquery”“subquery factoring”只执行一次吗?

三)“子查询”与“子查询分解”哪一个更好

谢谢。

回答

2

您可以使用子查询因子来替换不相关的子查询。
您如何在相关子查询中这样做?

我不明白(b)部分,你能改述吗?
猜测您的意思:在执行主查询之前,WITH子句中的子查询通常只执行一次。

对于大型数据集,子查询因子显然更好,因为您在大多数情况下(如果不是全部情况下)只执行一次子查询。对于较小的数据集,创建临时表的开销可能比实际查询耗时更长。

除了上面提到的性能问题之外,子查询因子分析结果更加清晰和易于维护的代码。

+0

“在执行主查询之前,WITH子句中的子查询通常只执行一次。” 因此,子查询因子分别独立执行一次。所以它不能用来完全替代相关的子查询。 – Sujee 2010-06-03 04:14:50

+0

我没有看到任何可能的方法将相关的子查询放入WITH子句。相关的子查询是要求主查询中的值才能运行的子查询。 – bernie 2010-06-03 04:28:34

+0

谢谢Adam Bernier。 – Sujee 2010-06-03 06:19:16

1

术语“subquery factoring”是否真的意味着re使用子查询进行因式分解?重构是改变例行程序以改进维护和可读性而不改变其结果的过程。有时无法将子查询重构为公用表表达式(转换为“WITH”子句)。此外,关于始终使用CTE或始终使用子查询(或派生表)没有黄金法则。它取决于数据和数据库管理系统,哪种方法最好。

+0

在我的问题中,“子查询因子”意味着使用'WITH'子句来取代传统的子查询。 – Sujee 2010-06-03 06:23:03