2013-09-30 252 views
2

我有安装了microsoft sql server的windows server 2008 r2。数据库缓存

在我的应用程序中,我正在为我的用户设计一个工具,即查询数据库以查看用户是否有任何通知。由于我的用户可以在短时间内多次访问应用程序,因此我正考虑在查询逻辑中放置某种缓存。但后来我想,我的MS SQL服务器可能已经为我做了。我对吗?或者我需要配置一些东西来实现它?如果是这样,那么它保持缓存多久?

回答

3

它是安全的假设,MSSQL会一直缓存工作得非常好=) 不要刻意试图建立自己任何东西首先,确保用于查询更改的方法是有效的(例如,不要在非索引列上查询)。

PS:本地缓存不会破坏检查数据库更改的整个目的吗?

1

SQL Server会为你处理缓存,是的。在创建查询或存储过程时,SQL Server将缓存该执行计划并相应地重用它。从MSDN

SQL Server的执行计划有以下主要组件:查询 计划执行计划的大部分是由任意数量的用户使用重入,只读数据 结构。这被称为 查询计划。查询计划中不存储用户上下文。有 从不超过一个或两个查询计划在内存中的副本:一个 副本为所有串行执行和另一个为所有并行 执行。无论并行度如何,平行副本都涵盖所有并行执行,即 。

执行上下文中,当前正在执行查询的每个用户都有一个数据结构,该数据结构保存特定于其执行的数据(如参数值)。这个数据结构被称为执行上下文。执行 上下文数据结构被重用。如果用户执行查询并且一个 的结构没有被使用,则将其重新初始化为新用户的 上下文。

如果你想清除这个缓存可以执行sp_recompileDBCC FREEPROCHCACHE

+0

执行计划缓存和重用是与问题完全不同的主题。 –

+0

@NenadZivkovic - 不是,OP在询问数据库缓存,缓存的执行计划是缓存的一部分,将在OP执行查询时使用。 –

2

内部数据库做各种事情,包括'缓存',但在任何时候它都可以工作难以置信的很难确保你的用户看到最新的数据。因此,每当您的应用程序发出请求时,它都需要做一些工作。

如果您想通过在应用程序中保留静态数据来减少工作量,那么您必须自己实现它。

.net框架的更高版本内置了缓存功能,因此您应该查看这些(构建自己的缓存可能会非常复杂)。