我在存储过程中执行以下查询,将一年的事务从一个表转移到另一个表:
insert into
table2
select
*
from
table1
where
dates between '20110101' and 20111231'
当我使用VB6调用存储过程时,它会超时。
我尝试将RDO连接上的QueryTimeout
属性设置为五秒,如下所示:
RdoConn.QueryTimeout = 5000
但它仍然超时。
如何防止执行查询超时?
答案 0 :(得分:1)
如果您使用Ado连接,则可以使用以下代码
dim myConn
Set myConn = CreateObject("ADODB.Connection")
myConn.CommandTimeout = 3600
myConn.ConnectionTimeout = 3600
然后使用此连接执行查询。
您的查询在没有问题的情况下运行多长时间?
更新:
使用RdoConnection,您可以尝试将事件设置为LoginTimeout
RdoConn.QueryTimeout = 5000
RdoConn.LoginTimeout = 5000
或Oleg Dok指出
RdoConn.QueryTimeout = 0 'disable timeout
RdoConn.LoginTimeout = 0 'disable timeout
答案 1 :(得分:1)
您的两个选项(不更改数据库架构)是:
1)增加你的超时时间,例如:
RdoConn.QueryTimeout = 30000
2)如果您的查询执行时间超过30秒,那么您应该尝试将select语句分解为更小的部分:
Insert into table2 select * from table1 where dates between '20110101' and 20110131'
Insert into table2 select * from table1 where dates between '20110201' and 20110228'
如前所述,您还应该查看数据库中的索引和数据类型以提高性能