我有一個複雜的查詢,需要在後續查詢(實際更新語句)中使用。我已經嘗試使用CTE和臨時表。使用CTE的性能與臨時表方法相比是非常糟糕的。它的東西像15秒比毫秒。爲了簡化測試,而不是在隨後的查詢中加入CTE/Temp表,我只需從中選擇*。在這種情況下,他們表現相同。SQL 2005 CTE vs TEMP表在其他表的連接中使用時的性能
我已經看過這兩種方法的執行計劃,並在隨後的查詢中加入連接,然後簡單地選擇*。通過簡單的選擇查詢計劃大致相同,但隨後的選擇查詢計劃不是。具體來說,用於創建和填充臨時表的查詢計劃部分保持不變,而用於創建和填充CTE的查詢計劃部分隨後在具有連接的查詢中使用時發生顯着變化。
我的問題是,爲什麼CTE的創建和填充的查詢計劃隨後如何使用,而臨時表不是這樣。同樣在什麼情況下,CTE會比臨時表產生更好的性能?
*注意我也使用了表變量,它與臨時表方法相當。
感謝
是的物化!定義中的PK/IX可能很好。 – crokusek 2013-03-08 17:56:39