遅すぎる:は、私は2つのテーブル持って
users (id, firstname, lastname, etc)
users_to_groups (user_id(index), group_id(index))
を私は次のようなレコードを返すクエリを作成したいと思います:
firstname lastname groups
John Smith 1,2,3,5
Tom Doe 3,5
私はGROUP_CONCAT機能を使用し、現在、私のクエリは:
SELECT * FROM users
LEFT OUTER JOIN
(
SELECT user_id, group_concat(group_id) FROM users_to_groups GROUP BY user_id
) AS i
ON users.id = i.user_id
ですが、動作は遅くなります。私はグループテーブルに40kユーザーと260kレコードを持っています。 クエリはインデックスを使用せず、すべてのユーザーに対して260kの行をすべて通過するように見えます。
もっと速くする方法はありますか? 3分以上かかりますが、そうしてはいけないと思います。
ありがとうございます!
あなたが自分自身でそれを実行した場合どのくらい内側のクエリは、実行に時間がかかりますか?あなたはEXPLAINの出力を投稿できますか? –
索引が使用されない理由を人々が理解できるように、照会のExplain計画を掲載してください。基本的には、すべてのユーザーの情報を要求しているようです(WHERE句はどこにもありません)ので、すべてのデータをスキャンする必要があります。単独で実行するとインナーセレクトにかかる時間はどれくらいですか? – Galz