我有安装了 microsoft sql server 的 windows server 2008 r2。
在我的应用程序中,我目前正在为我的用户设计一个工具,即查询数据库以查看用户是否有任何通知。由于我的用户可以在短时间内多次访问该应用程序,因此我正在考虑在我的查询逻辑上放置某种缓存。但后来我想,我的 ms sql 服务器可能已经为我做了。我对吗?还是我需要配置一些东西来实现它?如果是这样,那么它将缓存保持多长时间?
我有安装了 microsoft sql server 的 windows server 2008 r2。
在我的应用程序中,我目前正在为我的用户设计一个工具,即查询数据库以查看用户是否有任何通知。由于我的用户可以在短时间内多次访问该应用程序,因此我正在考虑在我的查询逻辑上放置某种缓存。但后来我想,我的 ms sql 服务器可能已经为我做了。我对吗?还是我需要配置一些东西来实现它?如果是这样,那么它将缓存保持多长时间?
可以安全地假设 MSSQL 将缓存工作得很好 =) 不要费心尝试在它之上构建任何东西,只需确保用于查询更改的方法是有效的(例如,不要查询非索引列)。
PS:本地缓存不会破坏检查数据库更改的整个目的吗?
在内部,数据库会做各种各样的事情,包括“缓存”,但始终难以确保您的用户看到最新的数据。因此,每次您的应用程序发出请求时,它都必须做一些工作。
如果您想通过在应用程序中保留静态数据来减少工作量,那么您必须自己实现它。
.net 框架的更高版本具有内置的缓存功能,因此您应该查看这些功能(构建您自己的缓存可能会变得非常复杂)。
SQL Server 将为您处理缓存,是的。当您创建查询或存储过程时,SQL Server 将缓存该执行计划并相应地重用它。来自MSDN:
SQL Server 执行计划具有以下主要组成部分: 查询计划 大部分执行计划是一个可重入的只读数据结构,可供任意数量的用户使用。这称为查询计划。查询计划中不存储用户上下文。内存中查询计划的副本永远不会超过一到两份:一份用于所有串行执行,另一份用于所有并行执行。并行副本涵盖所有并行执行,无论它们的并行度如何。
执行上下文,当前正在执行查询的每个用户都有一个数据结构,该结构保存特定于他们执行的数据,例如参数值。这个数据结构被称为执行上下文。执行上下文数据结构被重用。如果用户执行查询并且其中一个结构没有被使用,则使用新用户的上下文重新初始化它。
如果您想清除此缓存,您可以执行sp_recompile
或DBCC FREEPROCHCACHE