要在我的數據庫中執行轉換,我經常使用鏈接的一組視圖。在視圖內將是通用表格表達式。例如,我會具備以下條件:SQL Server 2008:與其他VIEW一起加入VIEW:預計算而不訴諸臨時表
CREATE VIEW TransformationStep1 AS
WITH Transformation1A AS (
SELECT Field1, Field2, Field3, Bla(Field1) AS Calc FROM Table1
),
Transformation1B AS (
SELECT Field1, Field2, Field3, Calc FROM Transformation1A
)
SELECT * FROM Transformation1B
CREATE VIEW TransformationStep2 AS
WITH Transformation2A AS (
SELECT Field1, Calc FROM TransformationStep1
), ....
某處TransformationStep4附近的查詢計劃變得更加複雜的看法會越來越慢。這是預料之中,並確定。
但是,當我想將TransformationStep4的一部分加入到它本身時,查詢將會非常緩慢,因爲優化器會嘗試一路找回源表並查找某種類型的索引。通常情況下,這是可以的,但有時候我只是想存儲我的臨時結果並加入,因爲(作爲故事中的設計人員)我知道結果表格會很小,加入會更快反對它的「預取」。
有沒有辦法讓我寫一個查詢提示,這將影響查詢計劃的方式,使得子查詢將被預取,然後加入?否則,我將不得不在存儲過程中使用臨時表,但如果可以的話,我想避免它。
感謝您的任何建議,也當你覺得我的設計很爛:-)
TOP作品!太棒了,現在我可以用它來實現我的通用表格表達式。 (我沒有認爲視圖是神奇的,我只是希望能夠操縱查詢優化器不會遞歸到我的CTE中。) – thomaspaulb 2010-10-11 18:30:20