Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server-在函数中缓存本地数据_Sql Server_Performance_Tsql_Database Administration - Fatal编程技术网

Sql server SQL Server-在函数中缓存本地数据

Sql server SQL Server-在函数中缓存本地数据,sql-server,performance,tsql,database-administration,Sql Server,Performance,Tsql,Database Administration,假设我有这个: SELECT x, y, z FROM t1 WHERE fn_ExpensiveLookup(x); 让我们假设fn_ExpensiveLookup执行了大量昂贵的操作(其中一些操作可能仅在查询/连接期间被缓存) 我不能在标量值函数中使用临时表,我相信表变量在函数调用之间不会持久存在 那么,如何在函数中缓存一些内容呢?是否可以将UDF重新写入参数化视图,如下所示: 基本上没有一个开始。。。结束。将select中的所有内容写入return语句中 结果将被重用(假设没有参数是浮

假设我有这个:

SELECT x, y, z
FROM t1
WHERE fn_ExpensiveLookup(x);
让我们假设
fn_ExpensiveLookup
执行了大量昂贵的操作(其中一些操作可能仅在查询/连接期间被缓存)

我不能在标量值函数中使用临时表,我相信表变量在函数调用之间不会持久存在


那么,如何在函数中缓存一些内容呢?

是否可以将UDF重新写入参数化视图,如下所示:

基本上没有一个开始。。。结束。将select中的所有内容写入return语句中

结果将被重用(假设没有参数是浮点数),查询将基于集合。还添加了SCHEMABINDING


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

能否将一些昂贵的“可缓存”逻辑移到函数之外,并将结果作为第二个参数传入?@Curt I只能更改where子句和函数。查询的其余部分无法更改。您可以使用同义词在标量值函数中使用临时表。不推荐使用这种方法,但也可以。