Оптимизация запросов в Postgresql
Оптимизируя запрос, следует обращать внимание не только на время его выполнения, но и как часто он будет выполняться.
На скорость выполнения запроса влияют следующие способы:
Обновление статистики, на основе которой планировщик строит планы
Изменения исходного кода запроса
Изменение схемы данных связанной с денормолизацией - создание материализованных представлений и временных таблиц, индексов, использование вычисляемых столбцов таблиц
Изменение параметров планировщика - использование нужных парметров соединения планировщиком, табличных выражений WITH, фиксированный порядок соединения(join_collapse_limit = 1), запрет раскрытия подзапросов и преобразования их в соединения таблиц (параметр from_collapse_limit = 1)
Изменение параметров планировщика агрегирование на основе хеширования (enable_hashagg), материализация временных наборов строк (enable_material), выполнение явной сортировки при наличии других возможностей (enable_sort), выбором метода доступа к данным (enable_seqscan, enable_indexscan, enable_indexonlyscan, enable_bitmapscan) и способасоединения наборов строк (enable_nestloop, enable_hashjoin, enable_mergejoin)
Для выбора планировщиком правильного плана, необходима актуальная статистика
Для обновления статистики используется команда ANALYZE (на уровне базы данных или на уровне таблицы)
Источники
Связанные темы
Установка и настройка MS SQL Server 2008 на Windows Server 2008 r
Использование модуля pg_stat_statements в postgresql
Системный каталог в Postgresql
Табличные пространства в Postgresql
Определение данных в Postgresql
Изменение временной зоны в Postgresql
Основные команды psql и sql Postgresql
Методы формирования соединений наборов строк
Агрегирование и группировка в Postgresql
Лексическая структура в Postgresql