1 対 1 のデータベース結合を最適化するための戦略は?
各テーブルに 100 万行が含まれているとします。
あなたが言及したようにテーブルのインデックスを作成することはすでにかなり良いですが、インデックスの順序に従ってディスク上のテーブルを物理的に順序付けることは、ほぼ理想的です。
このために、SQL Server でクラスター化インデックスを作成できます (クラスター化インデックスは、 PostgreSQLなどの他のデータベースでもサポートされています)。残念ながら、SQLite はクラスター化インデックスをサポートしていません。明らかに、クラスター化できるインデックスは 1 つだけです。基本的に、これは、テーブル ページがディスク上で物理的に順序付けられようとするインデックスです。
また、すべてのデータベース(SQLiteを含む)で、次のようなものを使用して、インデックスに従って並べ替えながらテーブルをコピーするだけです。
CREATE TABLE mytable_ordered AS
SELECT * FROM mytable
ORDER BY key_column;
DROP TABLE mytable;
ALTER TABLE mytable_ordered RENAME TO mytable;
CREATE INDEX mytable_key_column_idx ON mytable (key_column);
あなたが言及した別の大きなテーブルでも同じことを行う必要があります。この後、これらのテーブルを順序付けられたキーで結合する1:1
ことは、可能な限り高速にする必要があります (これらのテーブルを 1 つにマージすることはできません)。