【问题标题】:million transaction - improve performance of website百万交易 - 提高网站性能
【发布时间】:2011-05-10 13:50:56
【问题描述】:

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

我会重新考虑 SP 吗?但问题是,无论我做什么,我的最终结果都是小数据表。

有什么提高性能的建议吗?

【问题讨论】:

  • 还有更多细节吗?为什么程序必须读取 3 到 4 百万条记录?表结构和正在运行的查询是什么?
  • 您甚至没有发布正在使用的数据库引擎。我们应该如何帮助您?
  • 读取 3-4 百万行 需要时间 - 可能是真正读取的行数还是表中的行数?也许索引会有所帮助?请发布您使用的数据库。
  • 我一直在使用 SQL Server 2008。创建 SP 脚本是为了从超过 5 个表中聚合数据。避免使用光标,我需要按所有数据分组以制作小型数据表。它实际上是一个类似于数据表的矩阵。
  • 但我可以在加载此页面之前在后台运行此 sp。使用 SOAP 是个好主意吗?

标签: c# asp.net database performance soap


【解决方案1】:

如果表不经常更新,则制作一个性能更好的“聚合”表。

【讨论】:

  • 我一直在使用 SQL Server 2008。创建 SP 脚本是为了从超过 5 个表中聚合数据。避免使用光标,我需要按所有数据分组以制作小型数据表。它实际上是一个类似于数据表的矩阵。
  • 但我可以在加载此页面之前在后台运行此 sp。使用 SOAP 是个好主意吗?
  • @Shuvra:对于聚合表,@Pasi 可能意味着您应该将最终结果表(小表)存储到数据库中的某个地方,并为此设计了一个单独的表。所以查询它会非常快。然后,您服务器上的后台作业会不时刷新该表中的数据,因此无需在混合中包含 SOAP。
  • 感谢 Pasi 和 fretje。这真是个好主意。非常感谢您的帮助。
  • @Shuvra:如果您认为它对您的特定问题有帮助,您可以接受答案(顺便说一句,欢迎来到 Stack Overflow)。
【解决方案2】:

如果您正在处理 3 或 400 万行数据并实际进行实际工作,恕我直言,20 或 30 秒的性能相当不错。检查存储过程的执行计划。在理想的世界中,每个表都会受到索引搜索而不是表扫描的影响。如果您不确定如何解释展示计划结果,请咨询您的 DBA。我假设您使用的是 SQL Server。

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

create proc myProc

  @p1 varchar(32) 

as

  declare
    @p1Local varchar(32)

  set @p1Local = @p1

  ...

【讨论】:

  • 我在表中使用了索引,查询计划似乎还可以。但我可以在加载此页面之前在后台运行此 sp。使用 SOAP 是个好主意吗?
  • SOAP与存储过程的执行时间有什么关系?
  • 抱歉,我对 WCF/SOAP 的了解非常少。实际上我正在开发网络应用程序。因此,我在想,这个 SP 应该调用并加载数据集的页面。如果我在上一页中调用 SP 而不是这样做,那么用户可能会看到实际页面的加载速度比正常速度快。 SP参数是在登录时间选择的。通过这种方式,我可以轻松地提高性能。这是个好主意吗?还有什么建议。非常感谢您的帮助。
【解决方案3】:

如果您的数据不经常更新,您可以创建索引视图。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 2014-07-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    相关资源
    最近更新 更多