Asp.net 处理可变时间查询的策略?

Asp.net 处理可变时间查询的策略?,asp.net,sql,performance,caching,sql-server-2008-r2,Asp.net,Sql,Performance,Caching,Sql Server 2008 R2,从性能的角度来看,我有一个典型的场景。用户从下拉列表中选择一个值并单击按钮。存储过程将该值作为输入参数,执行并将结果返回到网格。对于其中一个值('All'),查询将运行大约2.5分钟。对于其余的值,查询的运行时间小于1ms 显然,让用户等待2.5分钟是行不通的。那么,处理这一问题的典型策略是什么 我自己的一些想法: 存储“All”值信息并每晚生成的新表 在缓存服务器上缓存数据 感谢您的帮助 谢谢 更新 更多信息: sp返回两个结果集。第一个是分组汇总,第二个是第一个结果集,分类(大约8000

从性能的角度来看,我有一个典型的场景。用户从下拉列表中选择一个值并单击按钮。存储过程将该值作为输入参数,执行并将结果返回到网格。对于其中一个值('All'),查询将运行大约2.5分钟。对于其余的值,查询的运行时间小于1ms

显然,让用户等待2.5分钟是行不通的。那么,处理这一问题的典型策略是什么

我自己的一些想法:

  • 存储“All”值信息并每晚生成的新表
  • 在缓存服务器上缓存数据
感谢您的帮助

谢谢

更新

更多信息:


sp返回两个结果集。第一个是分组汇总,第二个是第一个结果集,分类(大约80000行)。

。使用查询分析器和数据库调优助手是查看索引可能有帮助的一种简单且通常有效的方法

如果在创建适当的索引后仍然存在性能问题,那么可以考虑添加表/视图以加快速度。如果你的查询有很多连接,你可以考虑创建一个索引视图,允许你做一个选择,而不加入非正规化数据。因为索引视图是持久化的,所以您可以从它们的使用中看到巨大的收益

您可以在此处阅读索引视图:

并在此处阅读有关数据库调优顾问的信息:


还有,“全部”返回多少条记录?我以前见过人们对“全部”场景挂断电话,但如果它返回100万条记录或其他什么,那么数据对任何人都是不可用的…

缓存数据是一件好事,但是。。。。如果SP本身存在缺陷,那么您可能希望实际修复它,而不是试图用缓存来包扎它

您可能还想(因为您在这里没有提到)查看与其他选择相比的“所有”返回的行数,并考虑索引

此外,在您的SP中,“全部”是否会导致它运行不同的tsql集,就像在案例或if中一样。。。或者它运行相同的代码只是使用不同的“WHERE”

可能只是“ALL”只是返回了很多记录。您可能希望使用ajax实现分页和部分数据集返回。。。(有点像提前返回前1000条记录,以便在返回数据集的其余部分时可以显示它,并在屏幕上显示跳动器)


这些都是选项。。。如果所有记录的数量与其他记录的数量没有太大区别。。。那么它可能与查询/索引/程序流有关。

如果您能向我们展示您的查询和表结构,您将获得更好的帮助。2.5分钟很长。因此,除非确实有大量数据,否则您的查询或索引可能会出现问题,因此最好有更多信息,正如Abe Miessler所建议的那样。@Abe My sp包含复杂的业务和域逻辑。我认为把它粘贴在这里是没有帮助的。我的问题措辞非常笼统,我在寻找一个笼统的答案。@Abe,这是一个很好的观点。个人不,我不认为它会有用。网格正在使用分页,但仍在使用。我老板的想法是另一回事。哎呀,老板有时会让我发疯……sp没有缺陷,只是有很多数据。就像我说的,如果它返回那么多数据缓存或异步返回是最好的选择。对许多人来说,缓存依赖于糟糕的查询。。。如果您对SP有信心,并且返回了那么多行,那么还有其他选项。第二点:无论参数是什么,代码都是相同的(单个代码路径),isnull都围绕着参数,当传递“All”时,它实际上会将参数设置为null。是否存在包含null的内部联接?因为这几乎会使任何查询陷入困境。@Patrick-我不确定我是否能理解。所有联接条件都不包含null(构成联接的左侧和右侧字段都不包含null)