Téléchargé 3 fois
Vote des utilisateurs
0
0
Détails
Référencé dans
Navigation
Obtenir la liste des 10 index les moins performants
Obtenir la liste des 10 index les moins performants
Comment peut-on évaluer l'efficacité d'un index ?
Un index est efficace si il est placé sur une colonne possédant peu de doublons (NULLs compris). En effet le SGBD indexe les valeurs, ce qui implique que la présence de doublons réduit le nombre d'index.
Autrement dit, un index est performant si la différence entre le nombre de tuples total et le nombre de valeurs distinctes tend vers 0.
Nous chercherons donc à calculer le ratio du nombre de valeurs distinctes sur le nombre total de tuples, plus ce ratio est proche de 1, et plus l'index est performant.
Cette requête ne fonctionne qu'avec une version de MySQL possédant un catalogue (version 5.0.2 ou postérieure).
Un index est efficace si il est placé sur une colonne possédant peu de doublons (NULLs compris). En effet le SGBD indexe les valeurs, ce qui implique que la présence de doublons réduit le nombre d'index.
Autrement dit, un index est performant si la différence entre le nombre de tuples total et le nombre de valeurs distinctes tend vers 0.
Nous chercherons donc à calculer le ratio du nombre de valeurs distinctes sur le nombre total de tuples, plus ce ratio est proche de 1, et plus l'index est performant.
Cette requête ne fonctionne qu'avec une version de MySQL possédant un catalogue (version 5.0.2 ou postérieure).
Petit détail :
Le symbole de l'inégalité en SQL n'est pas != mais <>.
Autre détail :
Il vaut mieux utiliser le normatif COALESCE plutôt que le spécifique IFNULL.
Je n'ai pas testé la requête mais je suppose que tu l'as fait avant d'écrire l'article ?
Il peut aussi y a voir des index avec de très bon ratios mais qui ne seront (quasi) jamais utilisés car jouant sur un trop petit nombre de données.
Code : | Sélectionner tout |
1 2 3 4 | # WHERE /* exclut la base syst?me 'mysql' */ t.TABLE_SCHEMA != 'mysql' |
Autre détail :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 | ROUND(((s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) * 100), 2) AS `sel %` # /* exclut les index qui n'ont pas de probl?mes de performance (ratio = 1) */ # AND (s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) < 1.00 |
Je n'ai pas testé la requête mais je suppose que tu l'as fait avant d'écrire l'article ?
Il peut aussi y a voir des index avec de très bon ratios mais qui ne seront (quasi) jamais utilisés car jouant sur un trop petit nombre de données.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.