我想测量运行和显示查询所需的时间.似乎有三种不同的时间长度:

A.从VBA打开查询到控件返回到下一个VBA行之间的时间.这可以通过以下方式来衡量:

dTime = Evaluate("Now()")
DoCmd.OpenQuery (sQueryName)
MsgBox (((Evaluate("Now()") - dTime) * 86400) & " seconds")

但这并不是计算数据表所需的全部时间.在出现上述代码中的消息框后,对于大型查询,数据表窗口可能仍然大部分是空的,等待其内容被绘制.

B.从打开查询到完全绘制数据表之间的时间.

即使这似乎不是完成查询工作的全部时间,因为对于大型查询,当数据表完全绘制时,它仍然不会响应鼠标单击以 Select 它.

C.打开查询及其数据表与鼠标单击以 Select 它的响应之间的时间.

在我目前处理的一个有300,000行的查询中,时间大约是:

  • A.0.1秒
  • B.9秒
  • C.17秒

时间A与消息框中报告的时间相同,因此也是准确的.但BC是由我观察数据表窗口的行为手动计算的.我不知道是否有一种方法可以通过编程来检测BC的完成情况,这样我就可以准确地获得这些时间.

即使C也不是计算查询的所有行的时间.在C结束时,滚动数据表窗口可能需要另一段很长的时间才能重新绘制工作表.在我当前300,000行的查询上,这大约是另外9秒,之后数据表被完全重绘,并响应鼠标单击以 Select 它.我认为滚动的延迟意味着每次只计算数据表的可见部分.

我想测量查询代码更改的速度-效果,因此精确测量B和/或C会很有帮助.有什么办法可以做到这一点吗?

推荐答案

使用定时器,它足够接近:

Dim StartTime As Double

StartTime = Timer
DoCmd.OpenQuery (sQueryName)
DoEvents
MsgBox CStr(Timer - StartTime) & " seconds"

Sql相关问答推荐

在数据分区内执行确定

如何在case语句中使用条件来计算成对变量

LAG函数通过丢弃空值返回前一行

如何在不更改S代码的情况下,判断存储过程调用了多少次clr函数?

连接三个表的正确方式是什么?在这三个表中,可以显示在一个表上的行将在其他表中显示结果

PostgreSQL抽奖查询

对多个条件的SQL进行排名

在xml.Modify方法中使用子字符串和可能的替代方法

ColdFusion+Docker:未安装SQLSERVER包

表函数的作用域和功能

为什么SQL in中的空子查询有时被视为null

使用CTE在SNOWFLAKE中创建临时表

错误:postgresql 中缺少表评级的 FROM 子句条目

SQL 如何根据当前事件和下一个事件确定操作的持续时间?

SQL ORACLE - 查找连续天数

joins 组合多个重复数据删除策略

使用其他表 SUM 的交换价格转换价格并获得 AVG

如何将多行的查询结果合并为一行

如何计算每行出现的次数并显示在另一个表中?

有条件求和