Maison >base de données >tutoriel mysql >Comment puis-je faire en sorte que MySQL utilise des index pour les requêtes de vue ?

Comment puis-je faire en sorte que MySQL utilise des index pour les requêtes de vue ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 01:19:02738parcourir

How Can I Get MySQL to Use Indices for View Queries?

Faire en sorte que MySQL utilise un index pour les requêtes de vue

Requête : Comment encourager MySQL à exploiter un index pour une requête de vue ?

Réponse : Bien que l'utilisation de vues dans MySQL ne soit peut-être pas idéale, MySQL peut utiliser des index pour les requêtes de vue lorsqu'il est fourni avec des structures d'index appropriées.

Explication détaillée :

Les requêtes de vue de MySQL sont distinctes des autres bases de données car l'optimiseur ne « pousse » pas les prédicats de la requête externe dans la requête de vue. Dans ce cas, la requête externe filtre sur gone_in, mais MySQL n'applique pas ce filtre lors de l'exécution de la requête de vue.

En conséquence, la requête de vue est traitée séparément, créant une table temporaire (une table dérivée) . Lorsque la requête externe s'exécute, elle utilise la table dérivée comme source de ligne, évaluant alors le prédicat arriva_in = 2006.

Pour améliorer les performances, un index de couverture peut être défini :

CREATE INDEX highscores_IX3 ON highscores (player, happened_in, score)

Cet index inclut toutes les colonnes référencées dans la requête de vue, avec player comme première colonne (prédicat d'égalité) suivi de gone_in (GROUP BY). L'inclusion du score fait de l'index un index de couverture, permettant à MySQL de récupérer toutes les données nécessaires à partir de l'index seul.

Vous pouvez également envisager d'utiliser une requête autonome qui n'utilise pas de table dérivée, ce qui peut offrir de meilleures performances dans certains cas. :

SELECT player, MAX(score) AS highest_score, happened_in
FROM highscores
WHERE player = 24 AND happened_in = 2006
GROUP BY player, happened_in

Avec cette modification et un index de couverture approprié, MySQL devrait être en mesure d'optimiser la requête de vue, améliorant considérablement les performances en exploitant les index disponibles.

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!

Déclaration:
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