我可以请求SQL Server缓存某个结果集吗?

从ASP .NET页面调用某个查询。 我在Management Studio中研究了该查询的执行计划,87%用于排序。 我非常需要排序,否则显示的数据将毫无意义。

无论如何,我是否可以请求SQL Server缓存已排序的结果集,以便在后续运行中更快地返回数据?

或者SQL Server是否足够智能来执行缓存处理,如果可能的话,我试图强制它缓存结果我是否犯了错误?

任何相关信息将受到高度赞赏,并提前感谢:)

更新:
我刚刚在一篇文章中读到,使用聚簇索引创建View会提高性能,因为索引会将视图中的数据保留到磁盘中。 这是真的? 我该如何做到这一点? 有文章吗?

简而言之,不:不在SQL服务器端; 它会在可能的情况下将数据加载到内存中,并缓存执行计划 – 因此后续调用可能会更快 ,但无法缓存结果。

选项:

  • 调整计划; 排序听起来很激进 – 你可能会对某些数据进行非规范化或添加索引(甚至可能是聚集索引); 如果你显示它,我们可以对查询做其他事情(但是没有完全工作的数据库的调优最好是猜测)
  • 如果这样做是明智的,请将结果缓存在Web服务器上

虽然您可以创建索引视图 ,但正如您在更新中所提到的那样,您应该知道:

  1. 在创建视图时以及更新基于它的表时,必须遵循许多规则,以及
  2. 只是因为有一个(聚集的)索引,这并不意味着排序顺序 – 在查询该表时你仍然需要使用ORDER BY,并且,
  3. 除非您使用企业版,否则必须使用WITH(NOEXPAND) 查询提示查询视图
  4. 您可以通过在CREATE INDEX语句中指定ASC和DESC来指定索引的顺序,而不是在CREATE VIEW中。 在视图中允许ORDER BY的“黑客”(通过指定前100%)将没有任何效果。

有时使用的选项是将已排序的数据存储在辅助表中。 例如,这可以是您为会话创建的临时表,也可以是整个数据库的缓存表。

同样,SQL服务器本身将在内存中缓存频繁的查询。 您可以使用查询分析器并运行复杂查询几次来测试这一点,每次都会变得更快。 鉴于此,可能不需要永久缓存。

如果是,我建议使用缓存表并运行查询并将值插入另一个表中。 您可以使用应用程序变量或其他sql表来确定何时再次刷新缓存。

插入缓存表的示例查询:

插入缓存选择值,表1中的值按字段顺序排列