Maison > base de données > tutoriel mysql > le corps du texte

Les vues MySQL peuvent-elles exploiter les index pour des requêtes efficaces ?

Susan Sarandon
Libérer: 2024-11-10 00:47:02
original
741 Les gens l'ont consulté

Can MySQL Views Leverage Indexes for Efficient Queries?

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);
Copier après la connexion

Avec cet index en place, MySQL peut l'exploiter pour la requête de vue :

SELECT * FROM v_kobe_highscores WHERE happened_in = 2006;
Copier après la connexion

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;
Copier après la connexion

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!

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