まず、相関サブクエリは実際には一種の結合です。どちらが最良の実行計画を生み出すかについての黄金のルールはありません。パフォーマンスに関心がある場合は、さまざまなフォームを試して、何が最適かを確認する必要があります。または、少なくとも、その決定を下すために実行計画を見てください。
一般に、私はいくつかの理由で相関サブクエリを避ける傾向があります。まず、ほとんどの場合、相関関係なしで記述できます。次に、多くのクエリエンジンは、それらをネストされたループ結合に変換し(インデックスを使用しますが)、他の結合戦略の方が優れている場合があります。このような場合、相関するサブクエリにより、クエリを並列化することが困難になります。第3に、相関サブクエリは通常、SELECT句またはWHERE句のいずれかで使用されます。すべてのテーブルをFROM句に含めるのが好きです。
ただし、MySQLでは、相関サブクエリが最も多いことがよくあります。 クエリを実行する効率的な方法。これは、IN
でサブクエリを使用する場合に特に当てはまります。 句。したがって、黄金のルールはありません。