• 締切済み

複数テーブルからの抽出で時間にムラがでます

はじめまして。すみませんが教えてください。 1秒に1レコードで1日(60秒×60分×24時間)1テーブル(86400レコード)を作成しています。 10日で10テーブル作成します。 複数のテーブルから開始日時から終了日時までの範囲内で、かつ、ID1フィールドに1がセットされているデータを抽出するSQLを記述しておりますが、処理時間にむらがあります。 SQLの記述に問題があるのでしょうかお教えください。 ACCESS2000で.NETで開発しております。 sDTフィールドは主キーでDateTime型にしています。 SELECT T_1.sDT, T_1.DT1, T_1.DT2 FORM T_1 WHERE T_1.sDT BETWEEN #2010/02/16 12:00:00# AND #2010/02/10 20:00:00# AND T_1.ID1=1 UNION ALL SELECT T_2.sDT, T_2.DT1, T_2.DT2 FORM T_2 WHERE T_2.sDT BETWEEN #2010/02/16 12:00:00# AND #2010/02/10 20:00:00# AND T_2.ID1=1 UNION ALL SELECT T_3.sDT, T_3.DT1, T_3.DT2 FORM T_3 WHERE T_3.sDT BETWEEN #2010/02/16 12:00:00# AND #2010/02/10 20:00:00# AND T_3.ID1=1 ORDER BY T_1.sDT DESC; ExecuteReader実行時の処理時間を計測すると だいたい800msecなのですが、数回に一回25000msec掛かったりします。 すみませんがよろしくお願いします。

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

SQLがUNION ALLなのでデータ量による オーバーヘッドが生じている、という 可能性が一番高いとと思われますが。 その他は、スワップ、他のアプリの 起動など。 このSQLをどこから呼び出してどのような 処理をしているかにもより、そのときに オーバーヘッドが生じている、という 可能性はどうですか。連続処理を しているならばオーバーヘッド、 スワップも有りかもしれませんが、 スワップが生じたらすぐわかりますね。 こんなところです。

okada0504
質問者

補足

回答ありがとうございます。 リソースモニターで確認したところ、 物理メモリーが50%ぐらいでほとんど動きがありません。 CPU負荷率も大体ピークで50%。 やはりオーバーヘッドなのかもしれませんが。 現在、他の機材で検証しておりますが、 XPでは1050msecで安定。ほとんどフレがありません。 検証件数が100件ぐらいなんで確証ではありませんが。 Vistaでは再現性があります。 OSの問題もあるのかな? 引き続き、回答をお願いします。

関連するQ&A