データベース内のいくつかのCDをIDで検索するコードがあります。これは、「IN」条件を使用して行われます。
(1) SELECT * FROM album WHERE id IN (?,?,?,?,?)
次のステップは、これらのアルバムに関連付けられたトラックを取得することです。これを行うには、「base」クエリを少し変更します。
(2) SELECT track.* FROM album
LEFT JOIN track ON track.album_id = album.id
WHERE album.id IN(?,?,?,?,?)
今、私はアルバムとトラックの両方を持っています。ただし、トラックの作曲家の詳細をロードする必要があります。いくつかの理由で、上記のクエリと一緒に実行できないため、個別に実行する必要があります。
私にできることは、取得したトラックに基づいて作曲家を検索することです。ここで、トラックIDを使用し、これらのトラックIDに基づいて作曲家テーブルで作曲家を検索します。または、「base」クエリをさらに変更して、composersテーブルともう1つ結合することもできます。でも; ここに(パフォーマンスに関して)クエリの1つを好ましいものとして簡単に指摘する一般的なルールはありますか?私は少しテストを行ってきましたが、実際には何の違いも見られないほど小規模でテストしました...
(3) SELECT composer.* FROM album
LEFT JOIN track ON track.album_id = album.id
LEFT JOIN composer ON composer.track_id = track.id
WHERE album.id IN (?,?,?,?,?)
...また...
[get track ids from query (2)]
(4) SELECT composer.* FROM composer
WHERE composer.track_id IN (?,...);
記録のために:すべての基準と結合列にインデックスを設定しました。