如何确定ms access 2007中的查询执行时间?

时间:2011-03-23 15:53:22

标签: ms-access

我想确定我的查询更改的效果。为此,我需要一些性能指标。是否可以确定MS Access中查询的执行时间?使用外部程序或更改注册表(SHOWJETPLAN)不是一个选项,因为我的工作站确实被网络管理员锁定了...所以我需要一个in-Access解决方案。谢谢!

1 个答案:

答案 0 :(得分:1)

我有一种快速而肮脏的方法,用于评估替代算法的相对性能,不同的功能,查询等。

我使用了Access.Application对象的Run命令。它允许我快速比较2,3,4等不同的方法。对于每个其他方法,我只创建另一个名为ThingX的函数。

然后我使用迭代次数来解决GetTickCount约10 ms精度的限制。如果您想要比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