2010-06-18 123 views
2

这与我以前的主题:SQL Query takes about 10 - 20 minutesSQL瓶颈,如何解决

不过,我有点想通了这个问题。问题(如前面的线程所描述的)是不是插入(而其仍慢),问题是循环通过该数据本身 考虑下面的代码:

Dim rs As DAO.Recordset 
Dim sngStart As Single, sngEnd As Single 
Dim sngElapsed As Single 



Set rs = CurrentDb().QueryDefs("select-all").OpenRecordset 
MsgBox "All records retreived" 

sngStart = Timer 
Do While Not rs.EOF 
    rs.MoveNext 
Loop 
sngEnd = Timer 
sngElapsed = Format(sngEnd - sngStart, "Fixed") ' Elapsed time. 

MsgBox ("The query took " & sngElapsed _ 
    & " seconds to run.") 

正如你所看到的,这个循环就没有。您预计它会在几秒钟内完成,但运行需要大约857秒(或15分钟)。我不知道为什么它如此缓慢。也许lotusnotes sql驱动程序?

还有其他想法吗? (基于Java的解决方案,任何其他解决方案)

什么我的目标是:从远程服务器获取所有数据,并插入到本地访问表

+4

亲自我几乎从来没有通过记录循环,你处理数据库数据集不循环。 – HLGEM 2010-06-18 13:56:09

+1

您正在检索多少条记录?在什么连接? – 2010-06-18 13:56:36

+0

在LotusNotes SQL视图中大约有6000个。使用notesSQL驱动程序。 – masfenix 2010-06-18 14:03:54

回答

0

document包含有关NotesSQL中性能调整的一些信息。如果您尚未从Notes视图中选择数据,而不是Notes表单。然后NotesSQL将利用视图中的索引来加快查询速度。您可能需要在Notes数据库中创建视图,但性能优势将使其值得。

0

我的建议是,你创建一个传递查询将从远程服务器获取数据。然后创建一个使用上述查询作为源的Make Table查询。然后你的函数将被简化为对第二个查询的调用。

+0

我已经有了传递查询(从远程服务器获取数据)。我将研究make table查询。 – masfenix 2010-06-18 14:04:20

+0

如果您在新查询中更改为SQL视图,只需从passthroughquery执行Select * INTO newtable – websch01ar 2010-06-18 14:13:40

+0

花费大约15分钟:( – masfenix 2010-06-18 14:23:40

0

循环没有做“没有”它调用MoveNext,这可能会做很多。

+0

对,所以我需要它停止做很多事情,然后将该死的数据转移到我的本地访问表中 – masfenix 2010-06-18 14:10:00