Maison > base de données > tutoriel mysql > Pourquoi ma requête utilise-t-elle des tables temporaires et le tri de fichiers ?

Pourquoi ma requête utilise-t-elle des tables temporaires et le tri de fichiers ?

Susan Sarandon
Libérer: 2024-11-05 01:15:02
original
317 Les gens l'ont consulté

Why Does My Query Use Temporary Tables and Filesort?

Pourquoi MySQL utilise Temporary et Filesort dans cette requête

Votre requête pour extraire les statistiques d'objet des tables event_log et lookup_event_objects est confrontée à un goulot d'étranglement en termes de performances, comme indiqué par la sortie EXPLAIN "Utilisation de l'index ; Utilisation temporaire ; Utilisation du tri de fichiers." Voici pourquoi :

Tables temporaires

MySQL utilise des tables temporaires lorsqu'il y a une incompatibilité entre les clauses ORDER BY et GROUP BY, ou lorsque les colonnes de classement ou de regroupement appartiennent à des colonnes non -tables jointes. Dans ce cas, votre requête souffre de la première condition, car la clause ORDER BY (count_rows DESC, leo.object_desc ASC) diffère de la clause GROUP BY (el.object_id).

Filesort

"Utilisation du tri de fichiers" indique que MySQL n'est pas en mesure d'effectuer le tri spécifié dans la clause ORDER BY à l'aide d'un index. Puisque vous commandez par champ calculé (count_rows), la base de données doit effectuer une analyse complète de la table et trier les résultats.

Solution possible

Comme suggéré dans la réponse fournie, la solution consiste à supprimer la divergence entre les clauses ORDER BY et GROUP BY. Vous pouvez remplacer l'alias count_rows par l'opération de comptage réelle dans la clause GROUP BY :

SELECT
    el.object_id,
    leo.object_desc,
    COUNT(el.object_id) AS count
FROM
    event_log el
LEFT JOIN
    lookup_event_objects leo ON leo.object_id = el.object_id
GROUP BY
    el.object_id,
    count
ORDER BY
    count DESC,
    leo.object_desc ASC;
Copier après la connexion

Cela éliminera le besoin de tables temporaires et de tri de fichiers, améliorant potentiellement les performances de la requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal