У меня возникла проблема с запросом и масштабирование этого запроса для работы с пользователями с большим количеством друзей. Цель запроса захватить топ «деятельность в исполнении ваших друзей в течение последних 30 дней Вот мой запрос:.MySQL Optimization for Social Friends Graph (Group By Friends)
SELECT a.activity_id, b.activity_name, count(a.activity_id) as total_count
FROM friends as f
INNER JOIN activities as a on (a.user_id = f.friend_id
and a.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
INNER JOIN activity as b on a.activity_id = b.activity_id
WHERE f.user_id = 1 and f.is_approved = 1
GROUP by a.activity_id
ORDER by total_count DESC
LIMIT 5
Этот запрос не принимает, как 25 секунд для запуска для всех пользователей, независимо от того, насколько большой или маленьких их друзей график Индексы ниже:.
Table: activities
PRIMARY: [act_id] Other: [activity_id, user_id], [user_id, created_at], [created_at]
Table: friends
PRIMARY: [user_id, friend_id] Other: [user_id, is_approved], [friend_id]
Table: activity:
PRIMARY: [activity_id]
Любая помощь будет принята с благодарностью
UPDATE:. Вот объясните
id select_type table key key_len ref rows Extra
1 SIMPLE F ref friend_lookup 5 const,const 795 Using temporary; Using filesort
1 SIMPLE A ref user_id 4 F.friend_id 58 Using where
1 SIMPLE B eq_ref PRIMARY 4 P.activty_id 1 Using where
Возможно, выполнить EXPLAIN [Query], чтобы мы могли видеть, что делает планировщик запросов? –
Plz добавить результат объяснения, чтобы получить, как двигатель извлекает данные –
Я добавил объяснение выше. Не много строк для меня - но для запроса требуется более 25 секунд. – gregavola