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

Ran*_*ray 12 c# asp.net caching sql-server-2008

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

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

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

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

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

Mar*_*ell 12

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

选项:

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


Dam*_*ver 12

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

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