我想记住函数结果的性能,即懒惰地填充索引在函数参数上的缓存.第一次调用函数时,缓存将没有输入参数的任何内容,因此它将在返回之前计算并存储它.后续调用只使用缓存.
但是,似乎SQL Server 2000有一个关于函数"确定性"的愚蠢任意规则.INSERT,UPDATE和常规存储过程调用是被禁止的.但是,允许扩展存储过程.这是如何确定的?如果另一个会话修改了数据库状态,则函数输出仍会发生变化.
我疯了.我以为我可以让缓存对用户透明.这可能吗?我没有部署扩展存储过程的权限.
编辑:
这种限制仍然存在于2008年.出于上帝的缘故,你不能叫兰德!
缓存将由我在DB中实现.缓存是用于缓存的任何数据存储...
编辑:
在基础数据的更改之外,不存在函数的相同参数将产生不同结果的情况.这是一个BI平台,唯一的变化来自计划的ETL,此时我将TRUNCATE缓存表.
这些是I/O密集型时间序列计算,大约为O(n ^ 4).我没有权限更改基础表或索引.此外,许多这些函数使用相同的中间函数,缓存允许使用这些函数.
UDF不是真正的确定性,除非它们考虑到数据库状态的变化.重点是什么?是SQL Server缓存吗?(Ironic.)如果SQL Server正在缓存,那么它必须在对模式绑定的表的更改时到期.如果它们是模式绑定的,那么为什么不绑定函数修改的表?我可以看到为什么不允许触发,尽管这只是草率的; 只是架构绑定过程.而且,BTW,为什么允许扩展存储过程?你无法跟踪那些确保确定性的行为!哎呀!
编辑:
我的问题是:有没有办法以一种可以在视图中使用的方式懒惰缓存功能结果?