数日前にこの件に関して質問がありましたが、このクエリのパフォーマンスをどのように調整すればよいかまだ疑問に思っています。
私はこのようなテーブルを持っています(SQLite)
CREATE TABLE ZONEDATA (
TIME INTEGER NOT NULL,
CITY INTEGER NOT NULL,
ZONE INTEGER NOT NULL,
TEMPERATURE DOUBLE,
SERIAL INTEGER ,
FOREIGN KEY (SERIAL) REFERENCES ZONES,
PRIMARY KEY ( TIME, CITY, ZONE));
次のようなクエリを実行しています。
SELECT temperature, time, city, zone from zonedata
WHERE (city = 1) and (zone = 1) and (time BETWEEN x AND y);
x と y は変数で、その間に数十万の変数がある場合があります。
気温の範囲は -10.0 ~ 10.0、都市とゾーンの範囲は 0 ~ 20 (この場合は 1 と 2 ですが、別の値にすることもできます)。レコードは、さまざまなゾーンや都市から約 5 ~ 6 秒の間隔で継続的に記録されます。これにより大量のデータが作成され、すべてのレコードが正しい時間順に記録されるとは限りません。
問題は、大きな時間範囲 (レコードが時間によって 100% 正しくソートされていない場所) でレコードの取得を最適化する方法です。これには、特に複数の都市やゾーンから取得する場合に、かなりの時間がかかることがあります。つまり、上記のクエリを異なるパラメーターで数回実行することを意味します。私が探しているのは、クエリ、テーブル構造 (できればそうでない)、またはその他の変更可能な設定に対する特定の変更です。
これを使用する私のアプリケーションは、c ++で実装されています。