Как оптимизировать выборку из большой таблицы ?

Упрощенный вариант:
id INT
data VARCHAR
name_id INT
ext_id INT.

Записей около 30млн.
При запуске фунции выполняется 200 раз поиск по name_id или ext_id или name_id&ext_id.
Время поиск не должно превышать 0.5 сек.

Для ускорения поиска секционировал таблицы на 2 уровня. Скачало по name_id, потом это секцию еще по ext_id.
Стало быстрее на порядок.
Но это решение не подходит т.к. есть ограничение на константы в where, а у меня их в функции не может быть в принципе, везде переменные.
Вариант с Execute (динамический SQL) тоже не подходит, т.к. из-за отсутствия компиляции запросов функция работает еще дольше чем без секционирования.
Выходит на практике секционирование почти бесполезная фича PostgreSql?

Какие еще есть методы оптимизации в данной ситуации?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Вообще для

Вообще для таких ситуаций как раз и советуют делать partition больших таблиц.
http://postgresql.ru.net/manual/ddl-partitioning.html
Читайте. Вполне возможно - это всё что вам нужно!

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023