![]() |
1
3
提供一个“答案”,试图解决这个问题,因为这是我特别感兴趣的事情。 我遇见 this 有关如何查看SQL Server缓存中的内容的msdn文章。 这里有一个查询,它将向您显示对象缓存了多少数据页-我已经对其进行了调整,以包括索引名,如下所示:
如果您尝试以下步骤,您应该能够看到关于缓存的情况。在数据库中执行这些操作(与master相反):
1)检查点+清除缓存
这将向您提供一个关于该初始选择正在发生的数据缓存级别的指示。如果您再次重复这个过程,而不是执行select top语句,请执行存储过程,然后查看运行时缓存中的结束量-可能比较这些结果将指示select top 1与存储过程调用相比所执行的缓存的相对量-并且相对量可能指示性能改进。 这是非常“大声思考”的东西。我不认为前1名会为存储过程调用显著地启动缓存,但这就是我对这个问题感兴趣的原因! 我最初会认为这与其他因素(如服务器/磁盘负载)有关。您可以在两种方案之间交替进行3或4次迭代,一次接一次地重复检查Select Top方法实际上是否始终更好(有助于最大限度地降低它成为一次性亮点的风险) 希望这有助于/使球滚动。
更新:
|
![]() |
2
2
你对你问题的最新情况与我所期望的相符。我看不出
据我所知,SQL Server在运行查询时根据需要将数据页(包含表数据或索引数据)加载到内存中。除非它们被明确清除(使用
然而,问题在于知道要预缓存什么以及要运行什么查询。您可以对典型的活动运行SQL跟踪,然后将其重放到经常使用的预缓存数据中。但是,如果不让SQL Server保留大量已分配的内存,您总是需要从磁盘读取一些内容(除非您有一个小数据库)。因为您永远不会知道缓存的是什么,而不知道缓存的是什么,所以依赖这种行为来实现性能感觉是错误的。 我会集中精力使查询更有效,通过读取更少的数据或尽可能使用索引。这也将为您提供一般的好处以及冷启动时的更好性能。 |
![]() |
3
0
为完整表数据(或其子集)提供SQL Server缓存的一种方法是运行:
这将导致从磁盘读取表的所有列,但返回一个可以由SQL递增计算的微小结果。如果您尝试使用
调整列并添加
|
![]() |
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 7 年前 |
![]() |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
![]() |
hud · 执行存储过程会导致错误 8 年前 |
![]() |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |