Были некоторые примеры наилучшей практики, которые я не рассматривал, я впоследствии реализовал их, чтобы получить существенное увеличение производительности:
Уменьшение размера индекса tsvector
Iв tsvector хранилось до 25 000 символов, это означало, что когда использовались более сложные полнотекстовые поисковые запросы, было просто огромное количество работы, я сократил ее до 10 000, что имело большое значение и для моего случая использованияэто приемлемый компромисс.
Создание материализованного представления
Я создал материализованное представление, содержащее объединение, это снимает с себя небольшую часть работы, дополнительно я создал там свои индексы и запустилодновременное обновление с интервалом в 2 часа.Это дает мне довольно стабильную таблицу для работы.
Несмотря на то, что мой поиск дает 10 тыс. Записей, я в конечном итоге разбиваю на страницы на фронтэнде, так что я всегда вывожу на экран до 100 результатов, это позволяет мнечтобы присоединиться к исходной таблице только для 100 записей, которые я собираюсь отправить обратно.
Увеличение ОЗУ и использование pg_prewarm
Я увеличил ОЗУ сервера, чтобы дать мнедостаточно места для хранения моего материализованного представления, а затем запустил pg_prewarm в моем материализованном представлении.Хранение в памяти дало мне самое большое увеличение производительности, снизив 2-метровый запрос до 3 с.