par Guillaume Lelarge.

Opérations


référence MySQL : http://dev.mysql.com/doc/refman/5.6/en/explain-output.html

Accès aux tables et aux index

La sortie de plan d'exécution de MySQL a tendance à donner une fausse impression de sécurité car elle donne beaucoup d'informations sur les index utilisés. Bien que cela soit techniquement correct, cela ne signifie pas que l'index soit efficacement utilisé. L'information la plus importante se situe dans la colonne TYPE de la sortie de l'explain de MySQL (mais même ici, le mot-clé INDEX n'indique pas une indexation adéquate).

eq_ref, const

Réalise un parcours du B-tree pour trouver une ligne (comme INDEX UNIQUE SCAN) et récupère les colonnes supplémentaires de la table si nécessaire (TABLE ACCESS BY INDEX ROWID). La base de données utilise cette opération si une clé primaire ou une contrainte unique assure que le critère de recherche correspond à au plus une ligne. Voir “Utiliser un index” pour vérifier si l'accès à la table survient ou pas.

ref, range

Réalise un parcours du B-tree, suit la chaîne de nœuds feuilles pour trouver toutes les entrées correspondantes (similaire à un INDEX RANGE SCAN) et récupère les colonnes supplémentaires à partir de la table primaire si nécessaire (TABLE ACCESS BY INDEX ROWID). Voir “Utiliser un index” pour vérifier si l'accès à la table survient ou pas.

index

Lit l'index entier (toutes les lignes) dans l'ordre de l'index (similaire à un INDEX FULL SCAN).

ALL

Lit la table entière, toutes les lignes et toutes les colonnes, comme elle est stockée sur disque. En dehors de forts taux d'entrées/sorties, un parcours de table doit également inspecter toutes les lignes de la table, et peut donc aussi consommer beaucoup de temps processeur. Voir aussi « Parcours complet de table ».

Using Index (dans la colonne « Extra »)

Quand la colonne « Extra » affiche “Using Index”, cela signifie que la table n'est pas accédée car l'index dispose de toutes les données nécessaires. Pensez à “using index ONLY” (utilisation de l'index uniquement). Néanmoins, si un index trié est utilisé (par exemple l'index PRIMARY lors de l'utilisation d'InnoDB), “Using Index” n'apparaît pas dans la colonne Extra bien qu'il s'agisse techniquement d'un Index-Only Scan. Voir aussi « Regrouper les données ».

PRIMARY (dans la colonne « key » ou « possible_keys »)

PRIMARY est le nom de l'index automatiquement créé pour la clé primaire.

Tri et regroupement

using filesort (dans la colonne « Extra »)

« using filesort » dans la colonne Extra indique une opération de tri explicite, sans se soucier de l'endroit où se fait le tri (en mémoire ou sur le disque). « Using filesort » a besoin d'une grande quantité de mémoire pour matérialiser le résultat intermédiaire (sans pipeline). Voir aussi « Indexer un tri ».

Requêtes Top-N

Implicite (pas de « using filesort » dans la colonne « Extra »)

Un plan d'exécution MySQL ne montre pas une requête top-N de manière explicite. Si vous utilisez la syntaxe limit et ne voyez pas « using filesort » dans la colonne extra, c'est qu'elle est exécutée dans un pipeline. Voir aussi « Récupérer les N premières lignes ».

À propos de l'auteur

Photo de Markus Winand

Markus Winand teaches efficient SQL—inhouse and online. He minimizes the development time using modern SQL and optimizes the runtime with smart indexing—for that he also published the book SQL Performance Explained.

Livre de Markus

Couverture du livre « SQL : Au cœur des performances »

L'essence de SQL tuning dans 200 pages.

Acheter de Markus
(Livre de poche et PDF)

Achetez chez Amazon
(Seulement en poche)

“Use The Index, Luke!” by Markus Winand and translated by Guillaume Lelarge is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Mentions légales | Contact | NO WARRANTY | Marque déposée | Privacy | CC-BY-NC-ND 3.0 license