PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi PostgreSQL effectue-t-il une analyse séquentielle sur une colonne indexée ?

Si le SELECT renvoie plus d'environ 5 à 10 % de toutes les lignes de la table, un parcours séquentiel est beaucoup plus rapide qu'un parcours d'index.

En effet, une analyse d'index nécessite plusieurs Opérations d'E/S pour chaque ligne (recherchez la ligne dans l'index, puis récupérez la ligne du tas). Alors qu'une analyse séquentielle ne nécessite qu'une seule IO pour chaque ligne - ou même moins car un bloc (page) sur le disque contient plus d'une ligne, donc plus d'une ligne peut être récupérée avec une seule opération IO.

Btw :cela est également vrai pour d'autres SGBD - certaines optimisations telles que les "balayages d'index uniquement" sont mises de côté (mais pour un SELECT *, il est très peu probable qu'un tel SGBD opte pour un "balayage d'index uniquement")