SQL Server 2012 中的缓存和执行查询 - 我可以假设什么以及如何使用此缓存



我有以下问题:
我正在做两个查询 - 一个接一个。 这两个问题具有相同的"子选择":

第一:

SELECT SomeColumn
FROM 
 SomeFunction(id)
WHERE
 A and B and C
CROSS JOIN
 X

第二:

SELECT SomeColumn
FROM 
 SomeFunction(id)
WHERE
 A and B and C
CROSS JOIN
 Y

如您所见,唯一的区别是YX零件之间的区别。 查询的第一部分完全相同。
我可以指望 SQLServer 缓存它并且第二个查询会比第一个查询更快吗?问题是:何时以及如何在 SQLServer 中依靠缓存? 我可以手动完成,我的意思是首先获取

SELECT SomeColumn
FROM 
 SomeFunction(id)

然后在第一个和第二个查询中使用它

背景是mybatis和spring-boot,但我认为这并不重要。

页面(8KB(是SQLServer中的基本存储单元。

所以当你发出下面的查询

select * from table where id=2

假设 id =2 存储在两个页面中。SQL将首先检查,如果它们在缓存中,如果它们不在缓存中,它们将被带到缓存中并读取。

只要没有内存压力,这两个页面就会在缓存中。如果有内存压力,SQLServer 会开始基于 LRU 算法从内存中逐出缓存的页面,大致转化为较少使用的页面

所以有可能,你的下一个查询可能会从磁盘或内存中读取数据。

最新更新