Není to jen "hromada tuningu (indexy atd.)". To je zásadní a nutné.
Zveřejnili jste pár podrobností, ale zkusme to.
Pravidlo zní:Zkuste najít nejběžnější pracovní sadu. Podívejte se, zda se vejde do RAM. Optimalizujte pro něj hardware, nastavení vyrovnávací paměti PG/OS a indexy/shlukování PG. V opačném případě vyhledejte agregáty, nebo pokud to není přijatelné a potřebujete plně náhodný přístup, přemýšlejte, jaký hardware by vám mohl v rozumném čase prohledat celou tabulku.
Jak velký je váš stůl (v gigabajtech)? Jak je to ve srovnání s celkovou RAM? Jaká jsou vaše nastavení PG, včetně shared_buffers a efektivní_cache_size? Je to dedikovaný server? Pokud máte 250gigový stůl a přibližně 10 GB RAM, znamená to, že se do tabulky vejdete pouze 4 %.
Existují nějaké sloupce, které se běžně používají k filtrování, jako je stav nebo datum? Dokážete určit pracovní sadu, která se nejčastěji používá (jako jen minulý měsíc)? Pokud ano, zvažte rozdělení nebo shlukování těchto sloupců a rozhodně je indexujte. V podstatě se snažíte zajistit, aby se co nejvíce z pracovní sady vešlo do RAM.
Vyhněte se skenování tabulky za každou cenu, pokud se nevejde do RAM. Pokud opravdu potřebujete naprosto náhodný přístup, jediný způsob, jak by mohl být použitelný, je opravdu sofistikovaný hardware. Budete potřebovat trvalou konfiguraci úložiště/RAM, která dokáže přečíst 250 GB za rozumnou dobu.