SQL瓶颈,如何解决

时间:2010-06-18 13:52:09

标签: sql ms-access lotus-notes

这与我之前的帖子有关:SQL Query takes about 10 - 20 minutes

然而,我有点想出了问题。问题(如前一个线程所述)不是插入(虽然它仍然很慢),问题是循环数据本身 请考虑以下代码:

 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的解决方案,任何其他解决方案)

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

循环没有“无所事事”它正在调用MoveNext,这可能会做很多。

答案 2 :(得分:0)

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