J'utilise une requête qui s'exécute généralement en moins d'une seconde, mais prend parfois entre 10-40 secondes pour terminer. Je ne suis pas tout à fait clair sur la façon dont la sous-requête fonctionne, je sais juste que cela fonctionne, en ce qu'il me donne 15 lignes pour chaque faverprofileid. Je note les requêtes lentes et 5823244 lignes ont été examinées, ce qui est étrange car il n'y a pas de lignes proches dans les tables concernées (la table des favoris a le plus de 50 000 lignes) .Astuces pour améliorer cette requête mysql lente?
Quelqu'un peut-il me proposer des pointeurs? Est-ce un problème avec la sous-requête et l'utilisation de filesort?
EDIT: L'exécution expliquera que la table users n'utilise pas d'index (même si id est la clé primaire). Sous extra, il est dit: Utilisation temporaire; Utilisation de fichiers
SELECT F.id,F.created,U.username,U.fullname,U.id,I.*
FROM favorites AS F
INNER JOIN users AS U ON F.faver_profile_id = U.id
INNER JOIN items AS I ON F.notice_id = I.id
WHERE faver_profile_id IN (360,379,95,315,278,1)
AND F.removed = 0
AND I.removed = 0
AND F.collection_id is null
AND I.nudity = 0
AND (SELECT COUNT(*) FROM favorites WHERE faver_profile_id = F.faver_profile_id
AND created > F.created AND removed = 0 AND collection_id is null) < 15
ORDER BY F.faver_profile_id, F.created DESC;
Vous pourriez obtenir une meilleure coloration syntaxique si vous écrivez les mots-clés "select", "from", "where", "and", "in" et "order by" en lettres minuscules, et "inner", "join" , "on" et "desc" avec seulement une première lettre majuscule. –
Etes-vous en train d'essayer de sélectionner les 15 premiers éléments pour chaque faver_profile_id ordonné par créé? – Quassnoi
Avez-vous exécuté ANALYZE sur les tables? – vladr