Det är inte bara "ett gäng tuning (index etc.)". Detta är avgörande och ett måste.
Du har skrivit några detaljer, men låt oss försöka.
Regeln är:Försök hitta den vanligaste arbetsuppsättningen. Se om det får plats i RAM. Optimera hårdvara, PG/OS-buffertinställningar och PG-index/klustring för det. Sök annars efter aggregat, eller om det inte är acceptabelt och du behöver helt slumpmässig åtkomst, tänk vilken hårdvara som skulle kunna skanna hela tabellen åt dig inom rimlig tid.
Hur stort är ditt bord (i gigabyte)? Hur jämför det med totalt RAM? Vilka är dina PG-inställningar, inklusive shared_buffers och effective_cache_size? Är detta en dedikerad server? Om du har ett bord på 250 gig och cirka 10 GB RAM betyder det att du bara får plats med 4 % av bordet.
Finns det några kolumner som vanligtvis används för filtrering, som tillstånd eller datum? Kan du identifiera den arbetsuppsättning som används mest (som bara förra månaden)? Om så är fallet, överväg att partitionera eller klustera på dessa kolumner, och definitivt indexera dem. I grund och botten försöker du se till att så mycket av arbetsuppsättningen som möjligt får plats i RAM.
Undvik till varje pris att skanna bordet om det inte får plats i RAM. Om du verkligen behöver absolut slumpmässig åtkomst, är det enda sättet det kan vara användbart verkligen sofistikerad hårdvara. Du skulle behöva en beständig lagring/RAM-konfiguration som kan läsa 250 GB inom rimlig tid.