2011-03-23 108 views
1

我想確定更改我的查詢所產生的效果。要做到這一點,我需要一些性能指標。是否可以確定MS Access中查詢的執行時間?使用外部程序或更改註冊表(SHOWJETPLAN)不是一種選擇,因爲我的工作站真的被網絡管理員鎖定了...所以我需要一個in-Access解決方案。謝謝!如何確定ms access 2007中的查詢執行時間?

回答

1

我有一個快速和骯髒的方法,我使用用於評估的替代算法相對性能,是他們不同的功能,查詢等

我利用Access.Application對象的Run命令。它使我能夠快速比較2,3,4等不同的方法。對於每個額外的方法,我只是創建另一個函數名爲ThingX

然後,我使用迭代次數來解決GetTickCount約10毫秒精度的限制。如果你想要比GetTickCount更高的分辨率,你可以使用像QueryPerformanceCounter這樣的高分辨率定時器。就個人而言,我認爲這不值得所有額外的工作。如果您在VBA中編寫性能至關重要的代碼,並且擔心會縮短執行時間的微妙時間,那麼您將使用錯誤的工具(VBA)進行工作。

Private Declare Function GetTickCount Lib "kernel32"() As Long 

Sub TimeThings() 'vv 
Const NumThings = 2 
Const Iterations = 2500 
Dim t As Integer, i As Integer, s As Long 

    For t = 1 To NumThings 
     s = GetTickCount 
     For i = 1 To Iterations 
      'Debug.Print Run("Thing" & t, i) 
      Run "Thing" & t, i 
     Next i 
     Debug.Print "Thing "; t, GetTickCount - s; " ms elapsed" 
    Next t 
End Sub 

Function Thing1(Optional Val) 
    Dim i 
    For i = 1 To Val 
     Thing1 = Thing1 & Chr(65 + (i Mod 57)) 
    Next i 
End Function 

Function Thing2(Optional Val) 
    Dim i 
    Thing2 = Space(Val) 
    For i = 1 To Val 
     Mid(Thing2, i) = Chr(65 + (i Mod 57)) 
    Next i 
End Function 

在我的系統,運行TimeThings()產生以下的輸出:

Thing 1  4087 ms elapsed 
Thing 2  2652 ms elapsed