GROUP BY
一意のキーを使用してクエリに句を適用すると、LIMIT
制限が適用される前にすべてのグループが計算されますか?
テーブルに 100 のレコードがある場合 (それぞれに一意のキーがあります)、が適用される前に100
( 用に) 一時テーブルにレコードが作成されますか?GROUP BY
LIMIT
これが必要なケーススタディ:
例を挙げてみましょうStack Overflow
。
質問のリストを表示するために実行する各クエリには、この質問をしたユーザーと、そのユーザーが持っているバッジの数も表示されます。
したがって、ユーザー<-> 質問は 1 対 1 ですが、ユーザー <-> バッジは 1 つに複数あります。
1 つのクエリでこれを行う唯一の方法 (質問に対して 1 つとユーザーに対して別のクエリを組み合わせて結果を結合するのではありません) は、主キー (question_id) でクエリをグループ化し、user_badges テーブルに join+group_concat することです。
同じことが質問 TAGS にも当てはまります。
Code example:
Table Questions:
question_id (int)(pk)| question_body(varchar)
Table tag-question:
question-id (int) | tag_id (int)
SELECT:
SELECT quesuestions.question_id,
questions.question_body,
GROUP-CONCAT(tag_id,' ') AS 'tags-ids'
FROM
questions
JOIN
tag_question
ON
questions.question_id=tag-question.question-id
GROUP BY
questions.question-id
LIMIT 15