To nie tylko „garść dostrojenia (indeksy itp.)”. Jest to kluczowe i konieczne.
Opublikowałeś kilka szczegółów, ale spróbujmy.
Zasada jest taka:spróbuj znaleźć najczęściej używany zestaw roboczy. Sprawdź, czy mieści się w pamięci RAM. Zoptymalizuj dla niego sprzęt, ustawienia bufora PG/OS oraz indeksy/klastrowanie PG. W przeciwnym razie poszukaj agregatów lub jeśli jest to nie do zaakceptowania i potrzebujesz w pełni losowego dostępu, zastanów się, jaki sprzęt może przeskanować całą tabelę w rozsądnym czasie.
Jak duży jest twój stół (w gigabajtach)? Jak to się ma do całkowitej pamięci RAM? Jakie są Twoje ustawienia PG, w tym shared_buffers i Effective_cache_size? Czy to jest serwer dedykowany? Jeśli masz stół o pojemności 250 gigabajtów i około 10 GB pamięci RAM, oznacza to, że możesz zmieścić tylko 4% stołu.
Czy są jakieś kolumny, które są powszechnie używane do filtrowania, takie jak stan lub data? Czy możesz zidentyfikować zestaw roboczy, który jest najczęściej używany (jak tylko w zeszłym miesiącu)? Jeśli tak, rozważ partycjonowanie lub klastrowanie w tych kolumnach i zdecydowanie je zindeksuj. Zasadniczo starasz się upewnić, że jak najwięcej zestawu roboczego mieści się w pamięci RAM.
Za wszelką cenę unikaj skanowania tabeli, jeśli nie mieści się ona w pamięci RAM. Jeśli naprawdę potrzebujesz absolutnie losowego dostępu, jedynym sposobem, w jaki może on być użyteczny, jest naprawdę zaawansowany sprzęt. Potrzebujesz trwałej konfiguracji pamięci/RAM, która może odczytać 250 GB w rozsądnym czasie.