J'essaie ici de trouver essentiellement des utilisateurs qui ont des régions sportives & ciblées par une activité. Dans la table acces [users] il y a environ 17K utilisateurs. Chacun peut avoir un certain nombre d'intérêts sportifs et une région.Insight sur une optimisation de requête
Ici, la requête recherche pour chaque utilisateur ayant un sport & une région au moins ciblée via les activités. Les sports peuvent être jusqu'à 75 lorsque nous sélectionnons chacun d'eux [pas très bon avec une requête 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
Si je supprime la recherche de sport, la requête prend contournements 30 secondes pour exécuter. Sinon cela prend tout à fait pour toujours et utilise environ 99% de la proc avec mysql.
Des conseils pour vous aider?
[modifier: structure Tableau]
d'accès: id (clé primaire), l'utilisateur, PERSO _
id (touche clé/étranger à profil _
perso [perso _
id]) [quelques-autres champs]
profil _
perso: perso _
id (clé primaire) courriel, région _
id, id (clé étrangère acces [id]) [d'autres domaines]
accès _
profil _
sport: id/sport _
id (double clé primaire), niveau _
id (clé double avec sport _
id)
Pourriez-vous énumérer les tables avec lesquelles vous travaillez et quelles sont les colonnes? –
Vos tables sont-elles correctement indexées? Bien que cette requête ne soit pas géniale, il ne semble pas que cela prenne * long * sur le jeu de données relativement petit avec lequel vous travaillez. –
Vous ne nous avez pas donné 2 des tables dans cette édition. Me montrer un «expliquer» sur cette question donnera également beaucoup de perspicacité quant à où un index est probablement manquant. –