Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以请求SQL Server缓存某个结果集吗?_C#_Asp.net_Sql Server 2008_Caching - Fatal编程技术网

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

C# 我可以请求SQL Server缓存某个结果集吗?,c#,asp.net,sql-server-2008,caching,C#,Asp.net,Sql Server 2008,Caching,有一个特定的查询正在从ASP.NET页面调用。我在ManagementStudio中研究了该查询的执行计划,其中87%用于排序。我急需排序,否则显示的数据将毫无意义 我是否可以请求SQL Server缓存已排序的结果集,以便在后续运行中更快地返回数据 或者SQL Server是否足够聪明,可以进行缓存处理?如果可能的话,我是否因为试图强制它缓存结果而犯了错误 我们将非常感谢您提供的任何相关信息:) 更新: 我刚刚在一篇文章中读到,使用聚集索引创建视图将提高性能,因为索引将视图中的数据持久化到磁盘

有一个特定的查询正在从ASP.NET页面调用。我在ManagementStudio中研究了该查询的执行计划,其中87%用于排序。我急需排序,否则显示的数据将毫无意义

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

或者SQL Server是否足够聪明,可以进行缓存处理?如果可能的话,我是否因为试图强制它缓存结果而犯了错误

我们将非常感谢您提供的任何相关信息:)

更新:

我刚刚在一篇文章中读到,使用聚集索引创建视图将提高性能,因为索引将视图中的数据持久化到磁盘。这是真的吗?我该怎么做呢?有文章吗?

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

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

选项:

  • 调整计划;排序听起来很有攻击性——您是否可以对某些数据进行非规范化或添加索引(甚至可能是聚集索引);如果您显示查询,我们还可以对其执行其他操作(但是在没有完全工作的DB的情况下进行调优充其量是一种客户优化)
  • 如果合理的话,在web服务器上缓存结果
正如您在更新中所提到的,虽然您可以创建一个

  • 无论是在创建视图时,还是在更新视图所基于的表时,都必须遵循很多规则
  • 仅仅因为有一个(聚集)索引,这并不意味着排序顺序-在查询此表时,您仍然必须使用order BY
  • 除非您使用的是Enterprise edition,否则必须使用with(NOEXPAND)查询视图
  • 您可以通过在CREATEINDEX语句中而不是在CREATE视图中指定ASC和DESC来指定索引的顺序。允许视图中的ORDER BY(通过指定top 100%)的“hack”将没有任何效果

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

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

    用于插入缓存表的查询示例:

    插入到缓存中选择值,值从表1按字段排序