Я пытаюсь здесь найти пользователей, у которых есть спортивные & регионов, предназначенных для деятельности. В таблице acces [users] присутствует около 17K пользователей. У каждого может быть определенное количество спортивных интересов и один регион.Insight при оптимизации запроса
Здесь запрашивается каждый пользователь, у которого есть один вид спорта & один регион, по крайней мере, предназначенный для деятельности. Спорт может быть до 75, когда мы выбираем каждый из них [не совсем хорошо с запросом IN].
SELECT a.user, pp.courriel
FROM acces a
LEFT JOIN acces_profil_sport ap ON ap.id = a.id
LEFT JOIN profil_perso pp ON pp.id = a.id
WHERE ap.sport_id IN
(
SELECT ac.sport_id
FROM activite_sport ac
RIGHT JOIN activite a ON a.activite_id = ac.activite_id AND a.is_cron = 1 AND a.cron_processed = 0
)
AND pp.region_id IN
(
SELECT ar.region_id
FROM activite_region ar
RIGHT JOIN activite a ON a.activite_id = ar.activite_id AND a.is_cron = 1 AND a.cron_processed = 0
)
GROUP BY a.id
Если я удаляю спортивный поиск, запрос занимает около 30 секунд для запуска. В противном случае это займет довольно много времени и использует около 99% proc с mysql.
Любые подсказки, которые помогут вам?
[править: Структура таблицы]
Acces: идентификатор (первичный ключ), пользователь, персидско _
ID (ключ/внешний ключ Profil _
персидско [персидско _
ID]) [некоторые-другие-поля]
Profil _
персидско: персидско _
идентификатор (первичный ключ) courriel, область _
идентификатор, идентификатор (внешний ключ к Acces [ID]) [другие поля]
Acces _
Profil _
спорта: идентификатор/спорт _
идентификатор (двойной первичный ключ), niveau _
ID (двойной ключ со спортом _
ID)
Не могли бы вы указать, с какими таблицами вы работаете, и каковы столбцы? –
Правильно ли индексируются ваши таблицы? Хотя этот запрос невелик, кажется, что он не должен * * * длиться относительно относительно небольшом наборе данных, с которым вы работаете. –
Вы не дали нам 2 таблицы в этом редактировании. Показывая мне, что «объяснение» в этом вопросе также даст много информации о том, где, вероятно, отсутствует индекс. –