WHERE
のみを使用して結合をフィルタリングする いくつかの一般的なシナリオでは、非常に非効率になる可能性があります。例:
SELECT * FROM people p, companies c
WHERE p.companyID = c.id AND p.firstName = 'Daniel'
ほとんどのデータベースは、最初にデカルト積
を使用して、このクエリを文字通り実行します。 people
の およびcompanies
テーブルとその後 companyID
が一致するものによるフィルタリング およびid
田畑。完全に拘束されていない製品はどこにも存在せず、メモリ内に存在し、その後はほんの一瞬ですが、その計算には時間がかかります。
より良いアプローチは、制約をJOIN
でグループ化することです。 ■関連する場合。これは主観的に読みやすいだけでなく、はるかに効率的です。したがって:
SELECT * FROM people p JOIN companies c ON p.companyID = c.id
WHERE p.firstName = 'Daniel'
少し長くなりますが、データベースはON
を確認できます。 句を使用して、完全に制約されたJOIN
を計算します。 すべてから始めるのではなく、直接 そして制限します。これにより、計算が高速になり(特に、大規模なデータセットや多数のテーブルの結合がある場合)、必要なメモリが少なくなります。
「commaJOIN
」を使用するすべてのクエリを変更します 「構文。私の意見では、その存在の唯一の目的は簡潔さです。パフォーマンスへの影響を考慮すると、これが説得力のある理由ではないと思います。