2015-02-05 96 views
0

本地數據讓我們假設我有這樣的:SQL服務器 - 緩存內的功能

SELECT x, y, z 
FROM t1 
WHERE fn_ExpensiveLookup(x); 

而且假定fn_ExpensiveLookup做了很多昂貴的操作(其中有些可能只是爲了查詢/連接的持續時間被緩存的)。

我不能在標量值函數中使用臨時表,我相信表變量不會在函數調用之間持久。

那麼,如何緩存函數內的一些東西?

+0

你可以移動一些昂貴的「可破譯」邏輯的功能之外,並傳遞結果作爲第二個參數? – Curt 2015-02-05 13:19:11

+0

@Curt我只能改變where子句和函數。查詢的其餘部分無法更改。 – 2015-02-05 13:21:21

+0

通過使用同義詞,您可以在標量值函數內部使用臨時表。不推薦這樣做,但它可能。 – 2015-02-05 13:21:28

回答

2

是否可以重新編寫UDF是這樣的paramatized觀點: Create parameterized VIEW in SQL Server 2008

基本上沒有BEGIN ... END。在return語句中的select中寫入所有內容。

結果將被重用(假設沒有參數爲浮點數)並且查詢將變爲基於SET。還要添加WITH SCHEMABINDING。

如果這是可能的,查詢應該像任何其他謂詞一樣執行。