PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché PostgreSQL esegue la scansione sequenziale su una colonna indicizzata?

Se SELECT restituisce più del 5-10% circa di tutte le righe nella tabella, un'analisi sequenziale è molto più veloce di un'analisi dell'indice.

Questo perché una scansione dell'indice richiede diversi Operazioni di I/O per ogni riga (cercare la riga nell'indice, quindi recuperare la riga dall'heap). Considerando che una scansione sequenziale richiede solo un singolo IO per ogni riga, o anche meno perché un blocco (pagina) sul disco contiene più di una riga, quindi è possibile recuperare più di una riga con una singola operazione di IO.

A proposito:questo vale anche per altri DBMS - alcune ottimizzazioni come "scansioni solo indice" messe da parte (ma per un SELECT * è altamente improbabile che un tale DBMS vada per una "scansione solo indice")