大きな履歴トランザクションテーブル(1500万から2000万行の多くの列)と1行1列のテーブルがあります。1行のテーブルには、トランザクションテーブル('process_date')のデータをプルするために使用される日付(最終処理日)が含まれています。
質問:「process_date」テーブルをトランザクションテーブルに内部結合する必要がありますか、それともトランザクションテーブルを「process_date」テーブルに内部結合する必要がありますか?
大きな履歴トランザクションテーブル(1500万から2000万行の多くの列)と1行1列のテーブルがあります。1行のテーブルには、トランザクションテーブル('process_date')のデータをプルするために使用される日付(最終処理日)が含まれています。
質問:「process_date」テーブルをトランザクションテーブルに内部結合する必要がありますか、それともトランザクションテーブルを「process_date」テーブルに内部結合する必要がありますか?
これは私がそれを行う方法です
SELECT <<list only columns you need>>
FROM large_historical_transaction_table t
WHERE EXISTS (SELECT 1 FROM OneRowTable o
WHERE o.last_processing_date = t.process_date)
内部結合は対称的な双方向の関係であり、一般的には問題ではありませんが、この場合はまったく結合しないことをお勧めします。しきい値の日付を変数に読み取り、それをパラメーターとして他の選択クエリに渡します。 ...
テーブルを結合するとき、クエリオプティマイザは両方をすばやくスニッフィングして、最も適切な結合の実装を決定します。論理的には内部結合は対称的ですが、実装はパフォーマンスを向上させるために一方を他方よりも優先する場合があります。
読みやすくするために、トランザクション テーブルから内部結合して、日付を含む 2 番目のテーブルがフィルターのように機能することを明示的に示します。