Seq Scan, Index Scan, Bitmap : pourquoi le planificateur choisit
AvancéUn Seq Scan n'est pas un bug : sur une petite table, ou quand la requête ramène une grande part des lignes, lire séquentiellement est moins cher que sauter dans un index.
| Nœud | Quand il est choisi |
|---|---|
| Seq Scan | Table petite, ou le filtre retient une grande fraction des lignes |
| Index Scan | Peu de lignes recherchées, ou tri fourni par l'index |
| Index Only Scan | Toutes les colonnes lues sont dans l'index |
| Bitmap Index Scan + Bitmap Heap Scan | Un nombre moyen de lignes (trop pour un Index Scan, trop peu pour un Seq Scan), ou combinaison de plusieurs index |
Les algorithmes de jointure#
- Nested Loop : pour chaque ligne de l'extérieur, cherche dans l'intérieur ; excellent si l'extérieur est petit et l'intérieur indexé.
- Hash Join : construit une table de hachage sur le plus petit côté ; bon pour de grands ensembles non triés.
- Merge Join : fusionne deux entrées triées ; bon si elles le sont déjà (index).
Piège : le réflexe « il fait un Seq Scan, donc il faut un index » est faux. Vérifiez la sélectivité : si la requête renvoie 40 % de la table, aucun index ne rendra la lecture plus rapide.