Когда я делаю запросы в своей базе данных - у меня возникают проблемы с масштабированием, если у пользователя есть друзья 10k - тот же запрос, который я использую для пользователей с друзьями 2k, не масштабируется что означает, что для обработки требуется очень много времени.Сканирование запросов MySQL (Straight_Join vs Inner Join)
Типичная ситуация заключается в том, что, когда счетчик друзей пользователя достигает определенного порога, мне нужно в конечном итоге использовать STRAIGHT_JOIN, чтобы вытащить запрос, однако мне нужно написать условный оператор, чтобы сначала увидеть, сколько друзей и затем перейти оттуда , Чем больше данных, тем медленнее получается запрос.
Есть ли лучший способ увеличить ваши запросы через MySQL, чтобы они работали с одинаковой скоростью независимо от того, сколько данных генерируется или я живу в мире фантазий?
EDIT: Запрос перечислены ниже:
SELECT photos.photo_id, count(distinct photo_views.ip_address) as total_count
FROM photos
INNER JOIN friends on friends.friend_id = photos.user_id
INNER JOIN photo_views on photos.photo_id = photo_views.photo_id
WHERE friends.user_id = 1 and friends.approved = 1
and photos.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP by photos.photo_id
ORDER by total_count desc
Индексы фотографии являются:
[user_id, created_at, photo_id], [user_id], [photo_id] - PRIMARY
Индексы друзей являются:
[user_id, approved], [friend_id], [user_id, friend_id] - PRIMARY
Индекс по photo_views являются:
[photo_id] - PRIMARY
STRAIGHT_JOIN просто помогает, когда вы ЗНАЕТ правильное отношение таблиц и не хотите, чтобы двигатель думать за вас. Если вы можете опубликовать запрос, который вы пытаетесь запустить, могут быть другие параметры, такие как лучшие индексы, или когда/где корректировать предложения WHERE и т. Д. – DRapp
Я просто добавил запрос выше. – gregavola