Найти в Дзене
Postgres DBA

Оптимизация SQL-запросов PostgreSQL : индекс по UUID (пример)

CREATE INDEX CONCURRENTLY idx_table1_col2 ON table1 (col2); Если запрос выполняется часто и требуется максимальная производительность: -- Составной индекс, если часто нужны только эти поля (covering index) CREATE INDEX CONCURRENTLY idx_table1_col2_covering ON table1 (col2) INCLUDE (col1, col3, col4, col5, col6, col7, col8, col9, col10); - Текущая проблема: PostgreSQL вынужден делать полное сканирование таблицы (Parallel Seq Scan), так как нет индекса по `col2` - После создания индекса: Запрос будет использовать индексное сканирование, что значительно ускорит поиск по UUID - UUID оптимален для индексирования: Тип данных UUID хорошо подходит для B-tree индексов
Оглавление
Индексы придумали не просто так ,от нечего делать.
Индексы придумали не просто так ,от нечего делать.

Начало

Текст SQL запроса

-2

План выполнения запроса

-3

Оптимизация SQL запроса

1. Создание индекса

CREATE INDEX CONCURRENTLY idx_table1_col2 ON table1 (col2);

2. Дополнительная оптимизация

Если запрос выполняется часто и требуется максимальная производительность:

-- Составной индекс, если часто нужны только эти поля (covering index)

CREATE INDEX CONCURRENTLY idx_table1_col2_covering ON table1 (col2)

INCLUDE (col1, col3, col4, col5, col6, col7, col8, col9, col10);

Основание для оптимизации

- Текущая проблема: PostgreSQL вынужден делать полное сканирование таблицы (Parallel Seq Scan), так как нет индекса по `col2`

- После создания индекса: Запрос будет использовать индексное сканирование, что значительно ускорит поиск по UUID

- UUID оптимален для индексирования: Тип данных UUID хорошо подходит для B-tree индексов

Ожидаемый план после оптимизации

-4