クエリの最適化について学んでいます。一般に、JOINの前にPROJECTとSELECTを適用すると、パフォーマンスが向上します。私の質問は:
JOIN操作を適用する前にSELECT操作を適用したり、JOIN操作を適用する前にPROJECT操作を適用したりする方が良い場合はありますか?
ご回答ありがとうございます。
クエリの最適化について学んでいます。一般に、JOINの前にPROJECTとSELECTを適用すると、パフォーマンスが向上します。私の質問は:
JOIN操作を適用する前にSELECT操作を適用したり、JOIN操作を適用する前にPROJECT操作を適用したりする方が良い場合はありますか?
ご回答ありがとうございます。
「選択を押し下げる」ことは、実行する必要がある I/O の量を減らすことができる基本的な最適化戦略の 1 つです。
たとえば、サーガブルな述語を含むセレクションが join の下にプッシュされた場合、外部リレーションのタプルの数を減らすことで I/O の数を効果的に減らします (ネストされたループの結合には |R|+|R|*|Q|
I/O が必要です)。
選択を押し下げることの主な欠点は、元のリレーションの既存のインデックスが使用できない状況です。プッシュするかどうかの決定は、結合方法の選択と連動して行われます。
同様に、プロジェクションが結合に必要な属性を保持している場合は、プロジェクションを「押し下げる」ことができます。