1. Glosar/

Sequential Scan

Seq Scan / Full Table Scan

Sequential Scan (Seq Scan) este operația prin care PostgreSQL citește o tabelă de la început până la sfârșit, bloc cu bloc, fără a folosi vreun index. Este echivalentul PostgreSQL al Full Table Scan din Oracle.

Când este normal #

Pe tabele mici (câteva mii de rânduri), sequential scan-ul este adesea opțiunea cea mai eficientă. Citirea unei tabele întregi secvențial este mai rapidă decât lookup-urile pe un index când tabela încape în câteva pagini. Optimizer-ul alege sequential scan-ul când estimează că este mai ieftin decât un index scan.

Când este o problemă #

Pe tabele mari (milioane de rânduri), un sequential scan pentru a returna puține rânduri este un semnal de alarmă. Înseamnă că lipsește un index adecvat sau că statisticile tabelei sunt depășite și optimizer-ul face estimări greșite. pg_stat_statements ajută la identificarea acestor situații arătând query-urile cu cel mai prost raport blocuri citite / rânduri returnate.

Cum se diagnostichează #

EXPLAIN arată “Seq Scan on tabel” în planul de execuție. Dacă filtrul ulterior elimină majoritatea rândurilor (rows removed by filter » rows), aproape sigur este nevoie de un index pe coloana filtrului.