Имеется таблица состоящая из 9 столбцов где есть bigserial, boolean, timestamp а остальные integer'ы. Размер её 55 Гб. У нее есть 5 индексов по полям bigserial, boolean, timestamp и двум integer. Индексы весят 137 Гб.
Не раздулись ли индексы?
З.Ы.: в поисках правды - почему тормозят запросы...
Aristes: Какие вы запросы используете?
Если у вас во всех запросах есть фильтр по времени/дате, то можно все данные нашинковать под дням, либо часам - под каждый час своя таблица, итого один индекс можно выкинуть.
На поле bool вообще индекс не рекомендуется, т.к. каждое из двух значений будет содержать по пол базы. - трата памяти впустую, проще разнести все данные на 2 базы.
Далее если нужен разрез который не подходит под уже существующую шинковку, то можно просто сделать копию всех данных в новом разрезе, ssd дешевле чем ram.
Так же данные нарезанные по часам можно паковать, итого 55Гб могут превратится в 5Гб. А индексы уменьшаться до 100Мб, а может и ещё меньше.
При этом ещё будет профит - выборка может ускориться в 10 раз, за счет получения сжатых данных в пакетном режиме.
Эти советы хорошо подходят если вам нужно строить аналитику по данным.
Неоспоряю что партицирование замечательный вариант оптимизации, плюс вынос их в отдельную бд. Но архитектура приложения и самоцеленазначение накладывает такие ограничения. Увы и ах... спасибо! (Задал еще один интересный вопрос, если есть ответ - прошу помочь). Еще раз благодарю...