1

我正在运行以下 SQL 查询来查询我的数据库。

Query = "SELECT TimeValue, strValue FROM tabDataRaw WHERE ID_PAR = 5 AND TimeValue >= #01/10/2012 00:21:00# AND TimeValue <= #01/10/2012 18:12:00#"

但是,当我运行此查询时,我没有得到任何结果,代码在执行命令处冻结并且不返回任何结果。通常,几分钟后我会看到我的 PC 上使用的内存有所下降,我认为这是查询放弃了,但它永远不会返回任何内容。

我决定让代码在一夜之间运行,然后我早上回来发现一个System Resource Exceeded错误。我不明白这一点,因为我有大约 1.5GB 的 RAM 备用,这个查询应该只返回大约一千个结果。该表确实包含超过 1300 万条记录,但这肯定不会严重影响查询所需的 RAM,.mdb驱动器上的文件小于 1GB。

任何有关调试的帮助或建议将不胜感激。

编辑:我在我通常使用的数据语法中的查询中发现了一个错误,这导致了另一个错误,因为我正在查询错误的日期,这个查询正在寻找 1 月 10 日而不是 10 月 1 日。我通常使用这种形式使其更清晰:

Query = "SELECT TimeValue, strValue FROM tabDataRaw WHERE ID_PAR = 13 AND TimeValue >= #01 October 2012 00:21:00# AND TimeValue <= #01 October 2012 18:12:00#"

4

2 回答 2

1

该查询可能正在对表进行全面扫描。为避免这种情况,请在 上添加复合索引(ID_PAR, TimeValue)

CREATE INDEX ID_PAR__TimeValue_IDX             --- choose a name for the index
  ON tabDataRaw  (ID_PAR, TimeValue) ;

在大多数 DBMS 中,(覆盖)索引(ID_PAR, TimeValue, strValue)会更好,但我不确定这是否适用于 MS-Access。

于 2012-12-06T09:05:13.220 回答
-1

做以下方式

Query = "SELECT TimeValue, strValue FROM tabDataRaw WHERE ID_PAR = 5 AND (TimeValue between '01/10/2012' AND '01/10/2012' )

于 2012-12-06T12:32:42.340 回答