JOIN条件でリンクする必要があるいくつかの同一のフィールドを持つ2つのテーブルがあります。たとえば、各テーブルにはP1、P2のフィールドがあります。次の結合クエリを記述したいと思います。
SELECT ... FROM Table1
INNER JOIN
Table2
ON Table1.P1 = Table2.P1
OR Table1.P2 = Table2.P2
OR Table1.P1 = Table2.P2
OR Table1.P2 = Table2.P1
私が巨大なテーブルを持っている場合、このリクエストは多くの時間を実行しています。
1つの条件のみでクエリのリクエストがどのくらいの期間になるかをテストしようとしました。まず、P2とP1のすべてのデータが新しい行としてTable1とTable2にコピーされるように、テーブルを変更しました。だから私のクエリは簡単です:
SELECT ... FROM Table1 INNER JOIN Table2 ON Table1.P = Table2.P
その結果はさらに驚きました。何時間にもわたる実行時間(最初のケース)が2〜3秒に短縮されました。
どうしてそんなに違うの?複雑な条件が常にパフォーマンスを低下させるということですか?どうすれば問題を改善できますか?P1、P2インデックスが役立つかもしれませんか?最初のDBスキーマのままにし、1つのフィールドPに移動したくない。