比方說,你有一個觀點:爲什麼把一個WHERE外界看來子句中有可怕的性能
CREATE VIEW dbo.v_SomeJoinedTables AS
SELECT
a.date,
a.Col1,
b.Col2,
DENSE_RANK()
OVER(PARTITION BY a.date, a.Col2 ORDER BY a.Col3) as Something
FROM a JOIN b on a.date = b.date
我發現的性能:
SELECT *
FROM v_SomeJoinedTables
WHERE date > '2011-01-01'
比
差多少SELECT *,
DENSE_RANK()
OVER(PARTITION BY a.date, a.Col2 ORDER BY a.Col3) as Something
FROM a JOIN b ON a.date = b.date
WHERE a.date > '2011-01-01'
我很驚訝這兩個語句的查詢計劃是不一樣的。
我也嘗試過使用內聯表值功能,但查詢仍然需要比複製和粘貼視圖邏輯的代碼長100-1000倍。
任何想法?
那麼查詢計劃是什麼樣的?你是否缺少索引?該視圖是否返回太多行?如果where子句被應用在錯誤的地方? –
你的觀點恰好是在調用一個視圖嗎? – HLGEM
如果您的視圖不包含窗口功能,會發生什麼情況?什麼是一個VIEW的預期語義結果計算整個集合的排名,但是對該視圖的查詢會添加一個新的條件 - 如果RANK insde應用在外部條件之前或之後, – ErikE