如果我查看SQL-server的分析器,它会出现许多重复的查询,例如:
exec sp_executesql N'SELECT *
FROM [dbo].[tblSpecifications] AS [t0]
WHERE [t0].[clientID] = @p0
ORDER BY [t0].[Title]', N'@p0 int', @p0 = 21这些查询中的很多都不需要显示实时数据,也就是说,如果有人插入了与该查询匹配的新记录,即使在插入后长达一个小时都没有显示,也没有关系。
您可以输出缓存asp.net页面,但我想知道在数据库管理系统(特别是SQL-server)上是否有类似的功能,它将查询结果保存在缓存中,并在一段时间后更新缓存,目的是提高记录的检索速度。
发布于 2011-04-26 02:01:26
在SQL Server 2000及更早版本中,您可以使用DBCC PINTABLE (databaseid,tableid),但最好允许SQL Server管理您的内存
如果您希望“缓存”一个开销很大的聚合查询,那么可以创建一个索引视图来物化结果。
否则,数据库页在内存中保留的时间量由最近最少使用的策略决定。缓存中每个数据页的标头存储有关最近两次访问它的详细信息。后台进程扫描高速缓存,如果页面自上次扫描以来未被访问,则递减使用计数。当SQL Server需要释放缓存时,将首先刷新具有最低使用量的页。(专业版SQL Server 2008内部结构和故障排除)
sys.dm_os_buffer_descriptors为缓存中当前的每个数据页包含一行
发布于 2011-04-23 00:43:13
查询结果不会被缓存,但数据页本身将保留在缓存中,直到它们被其他读取操作推出。下次提交查询时,这些页面将从内存而不是磁盘中读取。
这是在可能的情况下避免表扫描的主要原因。如果要扫描的表足够大,缓存中就会充斥着可能无用的数据。
许多人有一种“谁在乎查询需要多长时间,它正在运行批处理模式”的态度,但他们没有看到对其他过程的影响,比如你提到的那个过程。
https://stackoverflow.com/questions/5743700
复制相似问题