ADO 查询超时,在 SQL 查询分析器 中执行却不会超时 (300分)

  • 主题发起人 主题发起人 Qiuliang
  • 开始时间 开始时间
Q

Qiuliang

Unregistered / Unconfirmed
GUEST, unregistred user!
现在遇到一个很棘手的问题。我用 ADODataSet 执行 SQL 从70万左右记录的表中取出部分记录,
查询中有几个表联接,ADODataSet.CommandTimeout = 60。正常情况下能在 30 秒之内完成
该查询,但有时却会出现超时已过期的错误。而且只要一有超时发生,以后再执行查询就总是超时,
但此时在 SQL 分析器中执行该查询却不会超出超时时间。更奇怪的是超时发生后只要重建表索引又
能正常查询了,但一两天后又会发生超时。

http://www.nicesoft.net
 
用存储过程试试!应该可以。
 
网络有问题!
有没有在导数据?
可能在导数据时把索引冲掉了!
 
应该建立存储过程
或视图
 
先检查网络是否有问题。
再就是使用存储过程。
 
>>先检查网络是否有问题。
我检查过,网络不会有问题。
>>再就是使用存储过程。
能不使用存储过程解决该问题是最好
 
>>查询中有几个表连接
建议写个视图把这几个表联起来。这样查询起来速度快很多。
 
我将 SQL 写为存储过程在 Delphi 中调用也一样超时。
 
自己搞定了,这么多分,给谁呢。不如大家来灌灌水,等一下分分。[8D]
 
既然你已搞定了,就不用我多嘴了。
混分。
 
那就说说答案吧
 
用临时表试试吧,听说能提高速度的,对这种下伟数据集,
 
70万左右记录,用视图来操作,只是方便,不会快的!
请楼主发表高见。 呵呵!
 
很奇怪,将
SELECT * FROM TableName WHERE Date BETWEEN :BeginDate AND :EndDate
改成
DECLARE @BeginDate datetime, @EndDate datetime
SELECT @BeginDate = :BeginDate, @EndDate = :EndDate
SELECT * FROM TableName WHERE Date BETWEEN @BeginDate AND @EndDate
就不会超时了[?][?][?]
 
这个问题我也到过!
在处理大数据量的时候,做成视图存储过程都会超时,
我只好把ADOConnect的时候超时时候设长一点
 
我的做法是:
在后台建一个专门的数据表,用来储存你JOIN来的记录,
然后再设计一个存储过程,用来填充该数据表并返回有效且适当的记录到给前台.
完成相关操作后,再删除该数据表的记录
目的:计算不复杂但网络流量大的操作尽可能在后台完成
 
分分罗![:(]
 
后退
顶部