首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缓存SQL查询

缓存SQL查询
EN

Stack Overflow用户
提问于 2011-04-21 19:52:40
回答 4查看 5.9K关注 0票数 4

如果我查看SQL-server的分析器,它会出现许多重复的查询,例如:

代码语言:javascript
复制
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)上是否有类似的功能,它将查询结果保存在缓存中,并在一段时间后更新缓存,目的是提高记录的检索速度。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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为缓存中当前的每个数据页包含一行

票数 3
EN

Stack Overflow用户

发布于 2011-04-21 20:00:27

没有,但是有大量的缓存解决方案,比如MemcachedEhcache

票数 1
EN

Stack Overflow用户

发布于 2011-04-23 00:43:13

查询结果不会被缓存,但数据页本身将保留在缓存中,直到它们被其他读取操作推出。下次提交查询时,这些页面将从内存而不是磁盘中读取。

这是在可能的情况下避免表扫描的主要原因。如果要扫描的表足够大,缓存中就会充斥着可能无用的数据。

许多人有一种“谁在乎查询需要多长时间,它正在运行批处理模式”的态度,但他们没有看到对其他过程的影响,比如你提到的那个过程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5743700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档