結果セットを生成するために複数のクエリを置き換えるクエリを実行しようとしています。かなり単純な1対1の結合がありますが、プライマリレコードごとに複数のレコードを保持するテーブルから取得しようとしている1つの列があります。自動インクリメントidカラムとmeet_entryサブクエリのクエリが大幅に遅くなる
のidカラムへの外部キーを持つ複数の行がある場合があり、主キーのid列と他の列の束と
meet_entries、 meet_entries_statuses、:基本的にはこのようなものですmeet_entries内の各行のためのmeet_entry_statusesに格納します。私のクエリでは、meet_entry主キーidに関連付けられた、最近追加された(最高のID番号)行を取得しようとしています。
SELECT
meet_entries.id,
member.firstname,
member.surname,
member.gender,
member.dob,
clubs.code,
clubs.clubname,
meet_entries.meals,
meet_entries.massages,
meet_entries.cost,
meet_entries.cancelled,
(SELECT meet_entry_status_codes.description
FROM meet_entry_statuses, meet_entry_status_codes
WHERE meet_entry_statuses.code = meet_entry_status_codes.id
AND meet_entry_statuses.id = meet_entries.id
ORDER BY meet_entry_statuses.id DESC
LIMIT 1) as status,
COUNT(DISTINCT meet_events_entries.id) as entries
FROM meet_entries, meet_events_entries, member, clubs, meet_entry_statuses, meet_entry_status_codes
WHERE meet_entries.meet_id = ?
AND meet_entries.id = meet_events_entries.meet_entry_id
AND meet_entries.member_id = member.id
AND meet_entries.club_id = clubs.id
GROUP BY meet_entries.id
;
ビットを追加:
(SELECT meet_entry_status_codes.description
FROM meet_entry_statuses, meet_entry_status_codes
WHERE meet_entry_statuses.code = meet_entry_status_codes.id
AND meet_entry_statuses.id = meet_entries.id
ORDER BY meet_entry_statuses.id DESC
LIMIT 1) as status,
は決して終えないために、第二の0.2であることから、クエリを取る
は、ここに私のクエリです。 meet_entriesには一致する行が10行しかありません。 meet_entries_statusesには、meet_entriesの10行に適切な行が約50行ありますが、私はそれぞれのmeet_entries行に対して1行だけを取得しようとしています。これを行うためのより良い方法に関する提案はありますか?
これは間違いなく違いがあります。私は、JOINなしでFROM句にそれらを含めることがそれを実現したことに気づいていませんでした。 –