現在、次のように定義しているテーブルがあります。
CREATE TABLE pairs (
id INTEGER PRIMARY KEY,
p1 INTEGER,
p2 INTEGER,
r INTEGER,
UNIQUE(p1, p2) ON CONFLICT IGNORE,
FOREIGN KEY (p1) REFERENCES points(id),
FOREIGN KEY (p2) REFERENCES points(id)
)
その後、ギガバイトのデータでいっぱいになります。ここで、次のように多くの選択を行う必要があります。
SELECT id, r FROM pairs WHERE p1 = 666 OR p2 = 666
問題は、この選択を高速化するためにどのインデックスを作成する必要があるかということです。
CREATE INDEX p1_index ON pairs(p1)
CREATE INDEX p2_index ON pairs(p2)
または多分
CREATE UNIQUE INDEX p_index ON pairs(p1, p2)
それとも両方かもしれませんか?(そして彼らのために新しいHDDを購入してください)。UNIQUE
SQLite3 は、複数の列に対する制約のインデックスを自動的に作成しません。