2010-06-03 74 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