人物、プロパティ、合計の3つのテーブルを組み合わせて、LEFT JOIN
を使用しています。私は次のクエリが本当に高速であることがわかりますが、テーブル-2またはテーブル-3に対応するデータがないテーブル-1のすべての行を私に渡すことはできません。基本的には、テーブル2とテーブル3にデータがある行のみが表示されます。SQLで複数のLEFT JOINが遅いです。どのように最適化するのですか?
SELECT a.*, b.propery_address, c.person_asset_total
FROM persons AS a
LEFT JOIN properties AS b ON a.id = b.person_id
LEFT JOIN totals AS c ON a.id = c.person_id
WHERE a.city = 'New York' AND
c.description = 'Total Immovable'
次の問合せに関係なく、対応するデータまたは表2及び表3からのデータがあるか否かの表1からすべての行を含めることによって、私に正しい結果を与える一方。ただし、このクエリは処理時間が非常に長くかかります。
FROM persons AS a
LEFT JOIN
properties AS b ON a.id = b.person_id
LEFT JOIN
(SELECT person_id, person_asset_total
FROM totals
WHERE description = 'Total Immovable'
) AS c ON a.id = c.person_id
WHERE a.city = 'New York'
2番目のクエリに相当しますが、最初のクエリに相当実行のスピードでデータを与えるクエリを記述するためのより良い方法はありますか?
最初のクエリでは、WHERE句は 'c.description'のNULL値を許可せず、左結合の外側を否定し、内部結合と同等になります。 'c.description = 'Total Immovable''述語を' WHERE'節からLEFT JOINの 'ON'節に再配置してください。 – spencer7593