Les vues MySQL peuvent-elles exploiter les index pour les requêtes ?
Il n'est pas simple pour MySQL d'utiliser des index pour les requêtes sur les vues. Malgré la présence d'index sur les tables sous-jacentes, les requêtes de vue sont traitées séparément, ce qui peut entraîner des inefficacités.
Solution : index de couverture
La solution optimale consiste à créer un « index de couverture " sur la table sous-jacente. Cet index doit inclure les colonnes référencées dans la requête de définition de la vue et toutes les colonnes utilisées pour le regroupement. Un index de couverture permet à MySQL de satisfaire la requête de vue directement à partir de l'index, évitant ainsi d'avoir besoin d'accéder aux pages de la table sous-jacente.
Par exemple, en considérant l'exemple fourni avec la table des meilleurs scores, un index de couverture peut être :
CREATE INDEX highscores_IX3 ON highscores (player, happened_in, score);
Avec cet index en place, MySQL peut l'exploiter pour la requête de vue :
SELECT * FROM v_kobe_highscores WHERE happened_in = 2006;
Pourquoi les vues dans MySQL peuvent Soyez problématique
Contrairement à certaines autres bases de données, MySQL ne « pousse » pas les prédicats des requêtes externes vers les requêtes de vue. Au lieu de cela, la requête de vue est exécutée séparément, matérialisant une table intermédiaire contenant toutes les lignes de la définition de vue. La requête externe est ensuite appliquée à cette table dérivée.
Ce processus peut entraîner une dégradation des performances, en particulier pour les vues définies sur de grandes tables.
Alternative : requête autonome indexée
Dans certains cas, il peut être plus efficace d'exécuter une requête autonome plutôt que d'utiliser une vue. Par exemple :
SELECT player , MAX(score) AS highest_score , happened_in FROM highscores WHERE player = 24 AND happened_in = 2006 GROUP BY player , happened_in;
Avec un index de couverture approprié sur la table des meilleurs scores, cette requête peut récupérer efficacement les données souhaitées sans la surcharge liée à la création et à la matérialisation d'une vue.
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!