Bases des bases de données
Pour une table Membre de 1 million de lignes, on envisage de créer un index en arbre B+ sur chacune des colonnes NumMembre (toutes différentes), Prefecture (47 valeurs) et Sexe (2 valeurs, réparties à peu près à moitié). Lors d'une recherche qui précise dans la clause WHERE la valeur d'une seule colonne, sur quelle colonne un index sera-t-il probablement le moins efficace ?
- APrefecture
- BSexe
- CNumMembre
Afficher la réponse et l'explication
Réponse : B. Sexe
Un index est efficace lorsque les lignes qui satisfont la condition se réduisent à une petite fraction de l'ensemble. Chaque NumMembre est différent ; une seule ligne correspond donc, et l'index y mène directement. Prefecture a 47 valeurs ; si les membres sont répartis uniformément, une valeur réduit la recherche à environ 1 million ÷ 47 ≈ 21 000 lignes (environ 2 % du total). Sexe a 2 valeurs réparties à peu près à moitié ; l'une ou l'autre valeur correspond donc à environ 500 000 lignes (environ 50 %). Extraire une par une autant de lignes en passant par un index est souvent plus lent qu'un parcours complet qui lit la table du début à la fin ; l'optimiseur du SGBD peut donc choisir un plan d'exécution qui n'utilise pas l'index. Ainsi, plus une colonne a de valeurs distinctes et plus une condition sur elle réduit fortement le nombre de lignes (plus elle est sélective), plus un index sur cette colonne est efficace.
Continuer : 9 autres questions sur Bases des bases de données