KDOC 392: 絞ってから関連レコードを取得してパフォーマンスを改善する
この文書のステータス
- 作成
- 2025-06-24 貴島
- レビュー
- 2025-06-26 貴島
概要
大量にJOIN先があるようなレコードを取得する場合、先にWHEREなどで件数を減らしてからJOINするとよい。
SELECT * FROM orders o JOIN ( SELECT id FROM users WHERE region = '東京' ) c ON o.customer_id = u.id;
この方法は件数を減らせる条件として使えるフィールドが、少ないテーブルに集まっている必要がある。条件判定用の値は1つのテーブルに集まり、表示用の値は複数のテーブルから集めてくる、というようなケースに使える。
ORMはよく Preload
として機能を用意している。関連データを別クエリで取得する。返すデータとして必要な関連データだけを得やすい。
逆に、検索条件に関連データを使いたい場合はよく Joins
を用意している。同じクエリ内でJOINするので、条件指定に関連テーブルが使える。検索して件数を絞る前に JOINするので、必要な処理は増える可能性がある。
関連
なし。