存储过程需要时间来执行导致.net中的超时异常

时间:2012-08-31 07:32:55

标签: .net sql

我们想要提供所提供范围内所有日期的金额。

逻辑就像 - 在while循环中我们正在取日期范围的金额列的总和并将该金额添加到另一个变量中

这需要1-3分钟才能执行,具体取决于日期范围。

因此我们在代码端遇到超时异常。

我们可以在存储过程中进行更改以减少时间,或者是否有其他方法可以在代码中处理此问题,以便不会抛出异常。

请帮助......

3 个答案:

答案 0 :(得分:3)

调整查询性能的各种方法包括:

  • 重写您的查询

没有一种方法可以编写查询。如果发现带有OUTER JOIN的查询需要很长时间,请使用INNER JOIN重写它。或者,WHERE子句的编写方式可能导致过多的数据库读取操作。

  • 规范化或取消规范化表格

虽然规范化表会导致理想的数据库设计,但它通常会导致查询不良。如果您发现常用查询必须跨越太多标准化表,请考虑一些重复数据。

  • 添加索引

缺乏明确定义的索引是查询需要很长时间才能执行的常见原因。创建索引将导致查询查找索引而不是表。

  • 删除索引。 在某些情况下,它是一个定义不明确的索引,导致查询执行缓慢。例如,索引不包括表中经常查找的列。在这种情况下,最好删除索引并重新创建它。

首先在存储过程中激活查询执行时间以查看需要时间的内容

  

SET STATISTICS TIME ON   选择*从......

您还可以通过以下方式查看查询的图形执行计划: 点击查询>包括实际执行计划。

您可以在Pinal Dave's Blog上阅读有关查询性能调优的更多信息,在这方面,他是最好的。

答案 1 :(得分:0)

正确的方法是优化您的程序,但由于您没有发布代码我无法对其说任何事情,另一种方法是处理症状,因此不会通过增加超时来抛出异常您的Connectionstring如:

"CommandTimeout = try any greater value;"

答案 2 :(得分:0)

如果您的查询确实需要这么长的时间,可以通过将SqlCommand的CommandTimeout property设置为适当的值来防止超时。

但首先要检查是否可以优化查询。