2012-02-09 63 views
0

如果我在SQL Server 2008上多次运行以下查询,它会在第一次缓存内部查询(我的复杂选择查询)的结果吗?SQL Server 2008子查询缓存?

或者它是否每次运行一个新的n和m值的查询?

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY x.id) AS rowID 
    FROM (*My complicated select Query* ORDER BY id) x 
) y WHERE y.rowID BETWEEN n AND m 
+1

我无法想象它是缓存结果。查询计划,可能。但是如果表在查询执行之间改变呢?它不能真正安全地缓存结果集。 – Blorgbeard 2012-02-09 15:49:59

回答

1

这将取决于多种因素,包括参数设置(简单/强制等),在“优化特设工作负载”的设置,内存容量,查询的复杂性,什么是在缓存中,计划执行的频率等。请注意,“缓存结果”(不会发生)和“缓存并重新使用计划”(可以)之间存在很大差异。除非您的数据库(或创建该表的文件组)已被设置为只读,否则缓存结果并不合理。