> [!NOTE] Seq Scan
> <table>
> <tr>
> <td width="25%"><img src="assets/ex_seqscan.png"></td>
> <td>The engine's most fundamental access path. It reads every page in the relation sequentially, loading them into Shared Buffers to check every tuple against the filter criteria. While linearly dependent on table size, it is the most robust option for low-selectivity queries or unindexed columns.</td>
> </tr>
> </table>
>
> ```sql
> -- Querying the entire animals table
> EXPLAIN (ANALYZE, COSTS, BUFFERS, VERBOSE)
> SELECT * FROM animals;
> ```
>
> ```text
> Seq Scan on public.animals (cost=1.00..348.00 rows=20000 width=27) (actual time=1.418..4.312 rows=20000 loops=1)
> Output: id, name, species_id, created_at
> Buffers: shared read=148
> Planning:
> Buffers: shared hit=51 read=17 dirtied=1
> Planning Time: 4.076 ms
> Execution Time: 4.872 ms
> ```
>
> <table>
> <tr>
> <td rowspan="5" width="25%"><img src="assets/ex_scan.svg"></td>
> <td><b>Performance</b></td><td>Scans the entire table, can be slow.</td>
> </tr>
> <tr><td><b>Factors</b></td><td>Table size, disk access speed.</td></tr>
> <tr><td><b>Cost</b></td><td><code>disk I/O cost * table size</code></td></tr>
> <tr><td><b>Operates on</b></td><td><a href="Structures/Table">Table</a></td></tr>
> <tr><td><b>Workloads</b></td><td><a href="Workloads/IO/DataFile/DataFileRead">IO: DataFileRead</a>, <a href="Workloads/IO/DataFile/DataFilePrefetch">IO: DataFilePrefetch</a>, <a href="Workloads/LWLock/Buffers/BufferContent">LWLock: BufferContent</a>, <a href="Workloads/LWLock/Buffers/BufferMapping">LWLock: BufferMapping</a>, <a href="Workloads/LWLock/Replication/SyncScan">LWLock: SyncScan</a></td></tr>
> <tr><td colspan="3"><b>Description</b>: Performs a sequential scan of a table.</td></tr>
> </table>