当前位置:  开发笔记 > 数据库 > 正文

SQL Server 2000中的缓存函数结果

如何解决《SQLServer2000中的缓存函数结果》经验,为你挑选了0个好方法。

我想记住函数结果的性能,即懒惰地填充索引在函数参数上的缓存.第一次调用函数时,缓存将没有输入参数的任何内容,因此它将在返回之前计算并存储它.后续调用只使用缓存.

但是,似乎SQL Server 2000有一个关于函数"确定性"的愚蠢任意规则.INSERT,UPDATE和常规存储过程调用是被禁止的.但是,允许扩展存储过程.这是如何确定的?如果另一个会话修改了数据库状态,则函数输出仍会发生变化.

我疯了.我以为我可以让缓存对用户透明.这可能吗?我没有部署扩展存储过程的权限.

编辑:

这种限制仍然存在于2008年.出于上帝的缘故,你不能叫兰德!

缓存将由我在DB中实现.缓存是用于缓存的任何数据存储...

编辑:

在基础数据的更改之外,不存在函数的相同参数将产生不同结果的情况.这是一个BI平台,唯一的变化来自计划的ETL,此时我将TRUNCATE缓存表.

这些是I/O密集型时间序列计算,大约为O(n ^ 4).我没有权限更改基础表或索引.此外,许多这些函数使用相同的中间函数,缓存允许使用这些函数.

UDF不是真正的确定性,除非它们考虑到数据库状态的变化.重点是什么?是SQL Server缓存吗?(Ironic.)如果SQL Server正在缓存,那么它必须在对模式绑定的表的更改时到期.如果它们是模式绑定的,那么为什么不绑定函数修改的表?我可以看到为什么不允许触发,尽管这只是草率的; 只是架构绑定过程.而且,BTW,为什么允许扩展存储过程?你无法跟踪那些确保确定性的行为!哎呀!

编辑:

我的问题是:有没有办法以一种可以在视图中使用的方式懒惰缓存功能结果?

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有