Het is niet alleen "een hoop afstemming (indexen enz.)". Dit is cruciaal en een must.
Je hebt weinig details gepost, maar laten we het proberen.
De regel is:probeer de meest voorkomende werkset te vinden. Kijk of het in het RAM past. Optimaliseer hardware, PG/OS-bufferinstellingen en PG-indexen/clustering ervoor. Zoek anders naar aggregaten, of als het niet acceptabel is en u volledig willekeurige toegang nodig heeft, bedenk dan welke hardware de hele tabel binnen een redelijke tijd voor u kan scannen.
Hoe groot is je tabel (in gigabytes)? Hoe verhoudt het zich tot het totale RAM-geheugen? Wat zijn uw PG-instellingen, inclusief shared_buffers en effectieve_cache_size? Is dit een dedicated server? Als je een tafel van 250 gigabyte en ongeveer 10 GB RAM hebt, betekent dit dat je maar 4% van de tafel kunt plaatsen.
Zijn er kolommen die vaak worden gebruikt om te filteren, zoals staat of datum? Kun je de werkset identificeren die het meest wordt gebruikt (zoals alleen vorige maand)? Als dat het geval is, overweeg dan om deze kolommen te partitioneren of te clusteren en ze zeker te indexeren. Kortom, je probeert ervoor te zorgen dat zoveel mogelijk van de werkset in het RAM past.
Vermijd koste wat kost het scannen van de tabel als deze niet in het RAM past. Als je echt absoluut willekeurige toegang nodig hebt, is de enige manier waarop het bruikbaar kan zijn echt geavanceerde hardware. U hebt een permanente opslag/RAM-configuratie nodig die binnen een redelijke tijd 250 GB kan lezen.