Ответ 1
Это не просто "куча настроек (индексы и т.д.)". Это важно и нужно делать.
Вы отправили несколько подробностей, но попробуйте.
Правило: попробуйте найти наиболее распространенный рабочий набор. Посмотрите, подходит ли он в ОЗУ. Оптимизируйте оборудование, настройки буфера PG/OS и индексы/кластеры PG для него. В противном случае ищите агрегаты, или если это неприемлемо, и вам нужен полный произвольный доступ, подумайте, какое оборудование может сканировать всю таблицу для вас в разумные сроки.
Насколько велика ваша таблица (в гигабайтах)? Как он сравнивается с общей оперативной памятью? Каковы ваши настройки PG, включая shared_buffers и effective_cache_size? Это выделенный сервер? Если у вас 250-гигабайтная таблица и около 10 ГБ ОЗУ, это означает, что вы можете разместить только 4% таблицы.
Существуют ли какие-либо столбцы, которые обычно используются для фильтрации, такие как состояние или дата? Можете ли вы использовать рабочий набор, который наиболее часто используется (например, только в прошлом месяце)? Если да, рассмотрите разделение или кластеризацию в этих столбцах и обязательно проиндексируйте их. В основном, вы пытаетесь удостовериться, что как можно больше рабочего набора подходит в ОЗУ.
Избегайте сканирования таблицы любой ценой, если она не подходит в ОЗУ. Если вам действительно нужен абсолютно произвольный доступ, единственный способ его использования - это действительно сложное оборудование. Вам понадобится постоянная конфигурация хранилища/ОЗУ, которая может считывать 250 ГБ в разумные сроки.