Je suis en train de concevoir un projet pour des quiz et des résultats de quizz. J'ai donc deux tables: quizz_result et quizz. le quizz a la clé primaire sur l'ID et le quizz_result a la clé étrangère QUIZZ_ID pour interroger l'identité.Deux jointures à gauche et une requête à un problème de performance MySQL
La requête ci-dessous est conçue pour prendre des quiz publics classés par date avec des informations associées: si l'utilisateur actuel (683735) a répondu à ce quiz et a un résultat valide (> 0).
donc je n'ai cette simple requête avec deux gauche rejoint:
select
a.*,
COUNT(countt.QUIZZ_ID) SUMFILL
from
quizz a
left join quizz_result countt
on countt.QUIZZ_ID = a.ID
group by
a.ID
et les index ajoutés sur ces colonnes: quizz:
ID, (ID, DATE), PUBLIC, (PUBLIC, DATE)
Et quizz_result:
ID, (QUIZZ_ID, USER_ID), QUIZZ_ID, USER_ID, (QUIZZ_ID, QUIZZ_RESULT_ID)
Mais quand je fais une requête, cela prend environ une minute. Et j'ai seulement 34k lignes dans QUIZZ_RESULTS et 120 lignes dans la table QUIZZ.
Quand je n'EXPLIQUER sur cette requête, j'obtiens ceci:
SELECT TYPE: simple, possible keys: IDX_PUBLIC,DATE, rows: 34 extra: Using where; Using temporary; Using filesort
SELECT TYPE: simple, possible keys: IDX_QUIZZ_USER,IDX_QUIZZ_RES_RES_QUIZ,IDX_USERID,I..., rows: 1, extra: nothing here
SELECT TYPE: simple, possible keys: IDX_QUIZZ_USER,IDX_QUIZ_RES_RES_QUIZZ,ID_RESULT_ID, rows: 752, extra: Using index
Et je ne sais pas quoi faire pour optimiser cette requête. Je vois ceci:
Using where; Using temporary; Using filesort
Mais je ne sais pas comment ce mieux, ou peut-être le nombre de lignes dans la dernière sélection est à hight? 752?
Comment puis-je optimiser cette requête?
EDIT: J'ai mis à jour la requête à celle-ci avec une seule jointure à gauche car elle a le même temps d'exécution long.
EDIT2: J'ai tout supprimé et c'est tout: ce simple choix avec une requête prend 1s à exécuter. Comment l'optimiser?
Essayez de lancer OPTIMIZE TABLE quizz, quizz_result; – Greg
@Greg Merci pour votre conseil. Je l'ai fait mais encore le temps est le même –