2010-06-18 121 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