2015-02-05 94 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。

如果这是可能的,查询应该像任何其他谓词一样执行。