sqliteで作成したこのようなテーブルがあります。
CREATE TABLE Cars (
POWER DOUBLE ,
CAPACITY DOUBLE,
SPEED DOUBLE,
TIME INTEGER NOT NULL,
TYPE INTEGER NOT NULL,
MODEL INTEGER NOT NULL,
PRIMARY KEY ( TIME, TYPE, MODEL ));
TYPE には 15 の異なる値があり、各タイプには 20 の異なる MODEL の値があります。すべてのモデルについて、10 秒ごとに新しいレコードが挿入されます。
ちょっとした例:
POWER----TIME----TYPE----MODEL
45.6 2588 3 14
46.8 2588 3 15
44.7 2588 3 16
このテーブルは、何百万行もある非常に巨大です。
ご覧のとおり、主キーは(TIME, TYPE, MODEL)
一意の識別子を作成しているためです。
私のアプリケーションは選択クエリを数回実行しますが、時間範囲が広い場合、または複数のモデルに対してクエリを実行すると、非常に長い時間がかかることがあります。
たとえば、私はこのタイプのクエリを頻繁に実行します。
SELECT power, time, type, model
FROM CARS
WHERE type = 3 AND model = 14 AND time BETWEEN 2588 and 13550;
いくつかの状況でパフォーマンスを向上させたような主キーを試してみました(TYPE, MODEL, TIME)
が、大きな時間間隔ではありませんでした。
私の質問は、このレコードの取得を最適化する方法と、この状況に最適と思われる主キーはどれですか?
挿入と更新は、パフォーマンスの面では問題になりません。