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,000件の結果しか返さない場合に約1.5GBのRAMスペアがあるため、これは理解できません。テーブルには1300万を超えるレコードが保持されますが、これがクエリに必要なRAMに影響を与えることはありません。ひどいことに、.mdbファイルはドライブ上で1GB未満です。

これをデバッグするためのヘルプやアドバイスをいただければ幸いです。

編集:私が一般的に使用しているデータ構文からのクエリに誤りがあり、間違った日付をクエリしていたために別のエラーが発生しました。このクエリは10月1日ではなく1月10日を検索しています。私は通常、このフォームを使用して明確にします。

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

The query is probably doing a full scan of the table. To avoid this, add a compound index on (ID_PAR, TimeValue):

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

A (covering) index on (ID_PAR, TimeValue, strValue) would be even better in most DBMS but I'm not sure if this applies to 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 に答える