子查询因子问题

时间:2010-06-03 03:38:40

标签: sql oracle subquery correlated-subquery

请解释。

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

b)“子查询”“子查询因子”只执行一次吗?

c)“子查询”vs“子查询因子”哪一个更好

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用子查询因子来替换不相关的子查询 你是如何建议对相关子查询这样做的?

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

对于大型数据集,子查询因子分解显然更好,因为在大多数情况下(即使不是所有情况)只执行子查询一次。对于较小的数据集,创建临时表的开销可能比实际查询花费的时间更长。

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

答案 1 :(得分:1)

通过术语“子查询因子分析”,你真的是指使用子查询进行重新因子分解吗?重构是改变例程以改善维护和可读性而不改变其结果的过程。有时无法将子查询重构为公用表表达式(转换为“WITH”子句)。此外,关于始终使用CTE或始终使用子查询(或派生表)没有黄金法则。这取决于数据和DBMS,哪种方法最佳。