0
本地數據讓我們假設我有這樣的:SQL服務器 - 緩存內的功能
SELECT x, y, z
FROM t1
WHERE fn_ExpensiveLookup(x);
而且假定fn_ExpensiveLookup
做了很多昂貴的操作(其中有些可能只是爲了查詢/連接的持續時間被緩存的)。
我不能在標量值函數中使用臨時表,我相信表變量不會在函數調用之間持久。
那麼,如何緩存函數內的一些東西?
本地數據讓我們假設我有這樣的:SQL服務器 - 緩存內的功能
SELECT x, y, z
FROM t1
WHERE fn_ExpensiveLookup(x);
而且假定fn_ExpensiveLookup
做了很多昂貴的操作(其中有些可能只是爲了查詢/連接的持續時間被緩存的)。
我不能在標量值函數中使用臨時表,我相信表變量不會在函數調用之間持久。
那麼,如何緩存函數內的一些東西?
是否可以重新編寫UDF是這樣的paramatized觀點: Create parameterized VIEW in SQL Server 2008
基本上沒有BEGIN ... END。在return語句中的select中寫入所有內容。
結果將被重用(假設沒有參數爲浮點數)並且查詢將變爲基於SET。還要添加WITH SCHEMABINDING。
如果這是可能的,查詢應該像任何其他謂詞一樣執行。
你可以移動一些昂貴的「可破譯」邏輯的功能之外,並傳遞結果作爲第二個參數? – Curt 2015-02-05 13:19:11
@Curt我只能改變where子句和函數。查詢的其餘部分無法更改。 – 2015-02-05 13:21:21
通過使用同義詞,您可以在標量值函數內部使用臨時表。不推薦這樣做,但它可能。 – 2015-02-05 13:21:28