Столбцы, которые используются для фильтрации или объединения (или, в меньшей степени, сортировка ) представляют интерес для индексации. Колонки, которые только что выбраны, едва уместны!
Для следующего запроса могут быть полезны только индексы a и e :
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Здесь f и, возможно, c также являются кандидатами:
SELECT a,b,c,d
FROM tbl_a
JOIN tbl_b USING (f)
WHERE a = $some_value
AND e < $other_value
ORDER BY c;
После создания индексов проверьте, действительно ли они полезны, с помощью EXPLAIN ANALYZE
. Также сравните время выполнения с и без индексов. Удаление и воссоздание индексов происходит быстро и просто. Есть также параметры для эксперимента с EXPLAIN ANALYZE
. Разница может быть ошеломляющей или не существующей.
Поскольку ваши таблицы предназначены только для чтения, обслуживание индекса обходится дешево. Это просто вопрос дискового пространства.
Если вы действительно хотите знать, что делаете, начните с чтения документов .
Если вы не знаете, каких запросов ожидать ...
Попробуйте зарегистрировать достаточно запросов, чтобы найти типичные варианты использования. Для этого регистрируйте запросы с параметром log_statement = all
. Или просто регистрируйте медленные запросы, используя log_min_duration_statement
.
Создайте индексов , которые могут быть полезны, и через некоторое время проверьте статистику, чтобы увидеть, что на самом деле используется. PostgreSQL имеет целую инфраструктуру для мониторинга статистики . Одним из удобных способов изучения статистики (и многих других задач) является pgAdmin , где вы можете выбрать свою таблицу / функцию / индекс и получить все данные на вкладке "статистика" в браузере объектов (главное окно).
Выполните действия, описанные выше, чтобы увидеть, действительно ли используемые индексы ускоряют процесс.
Если планировщик запросов должен выбрать один или несколько ваших индексов, но без каких-либо или неблагоприятных последствий, то, вероятно, что-то не так с вашей настройкой, и вам нужно изучить основы оптимизации производительности: вакуум, анализ, параметры стоимости, использование памяти, ...