我有一个页面调用一个存储过程来读取3到4百万的数据,进行一些计算并返回一个小数据表。 SP速度很慢。 20到30秒因此,整体页面加载速度很慢。万交易 - 提高网站性能
我会重新考虑SP吗?但问题是,无论我做我的最终结果将是小Datatable。
有没有提高性能的建议?
我有一个页面调用一个存储过程来读取3到4百万的数据,进行一些计算并返回一个小数据表。 SP速度很慢。 20到30秒因此,整体页面加载速度很慢。万交易 - 提高网站性能
我会重新考虑SP吗?但问题是,无论我做我的最终结果将是小Datatable。
有没有提高性能的建议?
如果你通过3到4百万行数据搅动并真正做到真正的工作,20或30秒是相当不错的表现,恕我直言。检查存储过程的执行计划。在理想的世界中,每张桌子都会受到索引查询的冲击,而不是桌面扫描。如果您不确定如何解释showplan结果,请咨询您的DBA。我假设你正在使用SQL Server。
检查以确保您的表格具有适当的索引并且统计信息是最新的。如果没有更新它们。重新编译存储过程。传递给存储过程的参数可以将缓存的执行计划汇总起来,如果它们是古怪的值。您可以通过编写存储过程像这样防止这种情况:
create proc myProc
@p1 varchar(32)
as
declare
@p1Local varchar(32)
set @p1Local = @p1
...
我有表使用索引和查询计划似乎没问题。但我可以在加载此页面之前在后台运行此sp。使用SOAP会是一个好主意吗? – Shuvra 2011-05-10 14:39:41
SOAP与存储过程的执行时间有什么关系? – 2011-05-10 14:48:24
对不起,我对WCF/SOAP的想法很少。实际上我正在开发Web应用程序。因此,我想,这个SP应该调用并加载数据集的页面。而不是这样做,如果我在前一页中调用SP,那么用户可能会看到实际页面加载速度较快,然后正常。在登录时选择SP参数。通过这种方式,我可以大胆地提高表现。这是个好主意吗?更多的建议。非常感谢您的帮助。 – Shuvra 2011-05-10 15:00:41
如果你的数据不会过于频繁地更新,你可以创建一个索引视图。
http://msdn.microsoft.com/en-us/library/dd171921(v=sql.100).aspx:
索引视图提供不能使用标准的指标来实现额外的性能优势。索引视图可以通过以下方式提高查询性能: 聚合可以预先计算并存储在索引中,以最大限度地减少查询执行期间的昂贵计算。 可以预先加入表格并存储结果数据集。 可以存储连接或聚合的组合。
更多详情?为什么程序必须读取3-4百万条记录?什么是表结构和正在运行的查询? – 2011-05-10 13:52:05
你甚至没有发布正在使用的数据库引擎。我们应该如何帮助你? – 2011-05-10 13:54:07
阅读3-4百万行*将需要时间 - 这可能是行真的读取或是表中的行数?也许索引会有所帮助?请发布您正在使用的数据库。 – vidstige 2011-05-10 13:56:06