Unlike MySQL PostgreSQL often skips indexes and does (unwanted) full table scan.

As an Amazon Associate I earn from qualifying purchases.

📚 Recommended Resources for Teachers

Teach Like a Champion  |  The First Days of School  |  Visible Learning  |  Understanding by Design

I spent much time tuning PostgreSQL to make it use indexes. The following works for me:

enable_bitmapscan = off
#enable_hashagg = on
enable_hashjoin = off
enable_indexscan = on
enable_indexonlyscan = on
enable_material = off
enable_mergejoin = on
enable_nestloop = off
#enable_parallel_append = on
enable_seqscan = off
enable_sort = off
#enable_incremental_sort = on
#enable_tidscan = on
#enable_partitionwise_join = off
#enable_partitionwise_aggregate = off
#enable_parallel_hash = on
#enable_partition_pruning = on