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!