2011-05-10 74 views
1

我有一个页面调用一个存储过程来读取3到4百万的数据,进行一些计算并返回一个小数据表。 SP速度很慢。 20到30秒因此,整体页面加载速度很慢。万交易 - 提高网站性能

我会重新考虑SP吗?但问题是,无论我做我的最终结果将是小Datatable。

有没有提高性能的建议?

+4

更多详情?为什么程序必须读取3-4百万条记录?什么是表结构和正在运行的查询? – 2011-05-10 13:52:05

+3

你甚至没有发布正在使用的数据库引擎。我们应该如何帮助你? – 2011-05-10 13:54:07

+1

阅读3-4百万行*将需要时间 - 这可能是行真的读取或是表中的行数?也许索引会有所帮助?请发布您正在使用的数据库。 – vidstige 2011-05-10 13:56:06

回答

1

如果表格没有更新,那么通常会创建一个具有更好性能的“聚合”表格。

+0

汇总表? – Magnus 2011-05-10 14:03:13

+0

我一直在使用SQL Server 2008. SP脚本创建用于聚合多于5个表中的数据。光标被避免,我需要所有的数据组成小数据表。它实际上是一个像数据表一样的矩阵。 – Shuvra 2011-05-10 14:20:05

+0

但我可以在加载此页面之前在后台运行此sp。使用SOAP会是一个好主意吗? – Shuvra 2011-05-10 14:22:05

1

如果你通过3到4百万行数据搅动并真正做到真正的工作,20或30秒是相当不错的表现,恕我直言。检查存储过程的执行计划。在理想的世界中,每张桌子都会受到索引查询的冲击,而不是桌面扫描。如果您不确定如何解释showplan结果,请咨询您的DBA。我假设你正在使用SQL Server。

检查以确保您的表格具有适当的索引并且统计信息是最新的。如果没有更新它们。重新编译存储过程。传递给存储过程的参数可以将缓存的执行计划汇总起来,如果它们是古怪的值。您可以通过编写存储过程像这样防止这种情况:

create proc myProc 

    @p1 varchar(32) 

as 

    declare 
    @p1Local varchar(32) 

    set @p1Local = @p1 

    ... 
+0

我有表使用索引和查询计划似乎没问题。但我可以在加载此页面之前在后台运行此sp。使用SOAP会是一个好主意吗? – Shuvra 2011-05-10 14:39:41

+0

SOAP与存储过程的执行时间有什么关系? – 2011-05-10 14:48:24

+0

对不起,我对WCF/SOAP的想法很少。实际上我正在开发Web应用程序。因此,我想,这个SP应该调用并加载数据集的页面。而不是这样做,如果我在前一页中调用SP,那么用户可能会看到实际页面加载速度较快,然后正常。在登录时选择SP参数。通过这种方式,我可以大胆地提高表现。这是个好主意吗?更多的建议。非常感谢您的帮助。 – Shuvra 2011-05-10 15:00:41

0

如果你的数据不会过于频繁地更新,你可以创建一个索引视图。

http://msdn.microsoft.com/en-us/library/dd171921(v=sql.100).aspx

索引视图提供不能使用标准的指标来实现额外的性能优势。索引视图可以通过以下方式提高查询性能: 聚合可以预先计算并存储在索引中,以最大限度地减少查询执行期间的昂贵计算。 可以预先加入表格并存储结果数据集。 可以存储连接或聚合的组合。