Что такое лучшая практика, что обеспечивает лучшую производительность?
В настоящее время у меня есть запрос со многими LEFT JOIN
с, который выбирает user
и все его данные, такие как друзья, запросы друзей и т. Д.on:
SELECT
`user`.`id` AS `user_id`,
`user`.`name` AS `user_name`,
`manager`.`id` AS `manager_id`,
`competition`.`id` AS `manager_competition_id`,
`competition`.`name` AS `manager_competition_name`,
`competition`.`week` AS `manager_competition_week`,
`country`.`id` AS `manager_competition_country_id`,
`country`.`name` AS `manager_competition_country_name`,
`club_template`.`id` AS `manager_club_template_id`,
`club_template`.`name` AS `manager_club_template_name`,
`club`.`id` AS `manager_club_id`,
`club`.`name` AS `manager_club_name`,
`club`.`ready` AS `manager_club_ready`,
`friend`.`friend_id` AS `friend_id`,
`friend_user`.`name` AS `friend_name`
FROM
`users` AS `user`
LEFT JOIN
`managers` AS `manager`
ON
`manager`.`user_id` = `user`.`id`
LEFT JOIN
`competitions` AS `competition`
ON
`competition`.`id` = `manager`.`competition_id`
LEFT JOIN
`countries` AS `country`
ON
`country`.`id` = `competition`.`country_id`
LEFT JOIN
`club_templates` AS `club_template`
ON
`club_template`.`id` = `manager`.`club_template_id`
LEFT JOIN
`clubs` AS `club`
ON
`club`.`id` = `manager`.`club_id`
LEFT JOIN
`friends` AS `friend`
ON
`friend`.`user_id` = `user`.`id`
LEFT JOIN
`users` AS `friend_user`
ON
`friend_user`.`id` = `friend`.`friend_id`
WHERE
`user`.`id` = 1
Как видите, это очень большой запрос.Я обосновал это тем, что лучше иметь только один запрос, который можно выполнить в одном запросе API, например, ...
/api/users/1
... против нескольких запросов, каждый в своем собственном запросе API.вот так ...
/api/users/1
/api/users/1/friends
/api/users/1/friend_requests
/api/users/1/managers
Но теперь я обеспокоен тем, что, поскольку он стал таким огромным запросом, он фактически повредит производительности, а не разделит его на отдельные запросы API.
Что будет лучше масштабироваться?
Обновление
Я изменил запрос на полный запрос.Это не последний запрос;Я планирую добавить еще больше объединений (или нет, зависит от ответа).
Каждая таблица имеет PRIMARY KEY
на id
.Все столбцы ассоциации (competition_id
, club_id
и т. Д.) Имеют регулярные INDEX
.Ядром базы данных является InnoDB.