2015-10-30 22 views
0

下面是兩個查詢,提供了相同的結果,唯一區別是第一個查詢與子查詢和第二個查詢與公用表表達式。問題是這兩種方式(子查詢和CTE)之間的「性能」差異是什麼?公用表表達式還是子查詢?

從我讀過的CTE中,當你想重複使用查詢,但除此之外,我還沒有讀過這兩種方式之間的任何其他優點或缺點。

SELECT col1,col2,col3,tt.c1,tt.c2.tt.c3 
FROM table1 t1 
INNER JOIN (SELECT t2.col1 as c1 ,t2.col2 as c2 ,t3.col3 as c3 
      FROM table2 t2 
      INNER JOIN table3 t3 ON t2.col1= t3.col1 
      WHERE t3.col1>100) tt ON t1.col1= tt.col1 

;WITH CTE(
SELECT t2.col1 as c1 ,t2.col2 as c2 ,t3.col3 as c3 
FROM table2 t2 
INNER JOIN table3 t3 ON t2.col1= t3.col1 
WHERE t3.col1>100 
) 


SELECT col1,col2,col3,tt.c1,tt.c2.tt.c3 
FROM table1 t1 
INNER JOIN CTE tt ON t1.col1= tt.col1 
+0

爲什麼不運行它們並查看執行計劃?這是瞭解性能差異所需要的。 –

+2

標記3個不同的數據庫引擎不會幫助。無論如何,這個問題太廣泛了。 – DavidG

+0

沒有區別。這裏沒什麼好看的,離開。 – Hogan

回答

0

在這種情況下,用這種用法,它本質上是相同的。 您只會使用CTE來提高可讀性。