我有一个典型的场景,从性能的角度来看,我正在苦苦挣扎。用户从下拉列表中选择一个值,然后单击一个按钮。存储过程将该值作为输入参数,执行并将结果返回到网格。对于其中的一个值(“All”),查询大约运行2.5分钟。对于其余的值,查询运行不到1ms。
显然,让用户等待2.5分钟是不可能的。那么,解决这一问题的一些典型策略是什么呢?
我自己的一些想法:
上的数据
任何帮助都是非常感谢的。
谢谢!
更新
更多的信息:
sp返回两个结果集。第一个是按汇总汇总的组,第二个是按分类的第一个结果集(大约80,000行)。
发布于 2011-04-04 09:08:45
缓存数据是件好事,但是.如果SP本身就有缺陷,那么您可能需要实际修复它,而不是尝试用缓存绑定它。
您也可能希望(因为这里没有提到)查看与其他选择相比“所有”返回的行数,并考虑您的索引。
在您的SP中,"All“会使它运行一组不同的tsql,就像在一个案例或一个if.还是使用不同的“何处”运行相同的代码?
可能只是“所有”只会返回很多记录。您可能希望使用ajax实现分页和部分数据集返回。(有点像提前返回前1000条记录,这样就可以在返回数据集的其余部分时在屏幕上显示一个throbber )
这些都是选择..。如果记录的数量在所有记录和其他记录之间并没有那么大的差别.然后,它可能与查询/索引/程序流有关。
发布于 2011-04-04 09:08:17
我将首先看看您是否有合适的索引。使用Query和数据库调优助手是查看哪些索引可能有所帮助的一种简单且通常是有效的方法。
如果在创建适当的索引后仍然存在性能问题,则可以考虑添加表/视图以加快速度。如果您的查询做了很多联接,您可能会考虑创建一个索引视图,该视图允许您对非规范化数据执行一个没有联接的选择。由于索引视图是持久化的,您可以从它们的使用中看到很大的收益。
您可以在这里阅读索引视图:
http://msdn.microsoft.com/en-us/library/dd171921%28v=sql.100%29.aspx
并在这里阅读有关数据库优化顾问的文章:
http://msdn.microsoft.com/en-us/library/ms166575.aspx
另外,“全部”返回了多少条记录?我以前见过有人被挂在“所有”场景中,但如果它返回100万条记录或其他东西,那么数据无论如何都是不可用的.
https://stackoverflow.com/questions/5541830
复制相似问题