我有一个页面调用存储过程来读取3到4百万个数据,进行一些计算并返回一个小数据表。 SP很慢。 20至30秒。因此,整体页面加载速度很慢。
我会重新考虑SP吗?但问题是无论我做什么,我的最终结果都是小数据表。
是否有任何改善表现的建议?
答案 0 :(得分:1)
如果表没有更新,那么经常制作一个性能更好的“聚合”表。
答案 1 :(得分:1)
如果你正在搅拌3到4百万行数据并实际上正在做真正的工作,那么20或30秒的表现相当不错,恕我直言。检查存储过程的执行计划。在理想的世界中,每个表都会被索引搜索而不是表扫描所击中。如果您不确定如何解释showplan结果,请咨询您的DBA。我假设您正在使用SQL Server。
检查以确保您的表具有适当的索引并且统计信息是最新的。如果没有更新它们。重新编译存储过程。如果是奇数值,则传递给存储过程的参数可以向上缓存执行计划。您可以通过编码存储过程来防止这种情况,如下所示:
create proc myProc
@p1 varchar(32)
as
declare
@p1Local varchar(32)
set @p1Local = @p1
...
答案 2 :(得分:0)
如果您的数据没有经常更新,您可以创建索引视图。
http://msdn.microsoft.com/en-us/library/dd171921(v=sql.100).aspx:
索引视图提供了使用标准索引无法实现的额外性能优势。索引视图可以通过以下方式提高查询性能: 聚合可以预先计算并存储在索引中,以最大限度地减少查询执行期间的昂贵计算。 可以预先连接表,并存储结果数据集。 可以存储联接或聚合的组合。