Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Postgres: SQL, EXPLAIN, query plan, database index, performance optimization

Как определить по плану запроса, используются ли индексы?

Этот вопрос проверяет умение анализировать план выполнения запроса (EXPLAIN) в СУБД для определения использования индексов, что критически важно для оптимизации производительности запросов.

Короткий ответ

Чтобы определить, используются ли индексы, нужно выполнить запрос с командой EXPLAIN (или аналогичной, в зависимости от СУБД) и проанализировать полученный план. Ключевые признаки использования индекса — операции Index Scan или Index Seek. Если в плане указаны операции Table Scan или Full Scan, это обычно означает, что индекс не используется, и СУБД читает всю таблицу. Также стоит обратить внимание на столбец "key" или "index", где указано имя используемого индекса.

Длинный ответ

План выполнения запроса (query execution plan) — это пошаговый алгоритм, который база данных использует для получения данных. Команда EXPLAIN (или EXPLAIN ANALYZE) позволяет увидеть этот план, не выполняя сам запрос. Анализ плана — основной способ понять, как СУБД обрабатывает запрос, и выявить узкие места, особенно связанные с использованием индексов.

Как выполнить EXPLAIN

В большинстве СУБД синтаксис схож. Например, в PostgreSQL и MySQL:

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

В SQL Server используется SET SHOWPLAN_TEXT ON; или графический план в SSMS.

Ключевые операции в плане запроса

  • Index Scan / Index Seek: Прямые признаки использования индекса. Seek эффективнее, так как использует B-дерево для прямого доступа к строкам. Scan читает все записи индекса.
  • Table Scan / Full Scan: СУБД читает всю таблицу, что указывает на отсутствие подходящего индекса или его неэффективность для данного условия.
  • Bitmap Index Scan (в PostgreSQL): Комбинирование нескольких индексов.

На что обращать внимание в выводе EXPLAIN

  • Тип доступа (access type): В MySQL столбец type со значениями ref, range, index указывает на использование индекса. ALL — полный сканирование таблицы.
  • Используемый индекс (key/index): В MySQL столбец key, в PostgreSQL — Index Name в узле плана.
  • Оценка строк (rows): Большое число в сочетании с Table Scan сигнализирует о проблеме.

Практический пример

Рассмотрим таблицу orders с индексом по customer_id.

-- Запрос 1: Использует индекс
EXPLAIN SELECT * FROM orders WHERE customer_id = 123;
-- В плане, скорее всего, будет "Index Scan using idx_customer_id on orders"

-- Запрос 2: Не использует индекс (если нет индекса по status)
EXPLAIN SELECT * FROM orders WHERE status = 'shipped';
-- В плане может быть "Seq Scan on orders" (Table Scan)

Вывод/Итог: Анализ плана запроса через EXPLAIN — обязательный навык для оптимизации производительности баз данных. Использование индексов определяется по операциям Index Scan/Seek в плане. Если их нет, нужно рассмотреть создание подходящего индекса или переписать запрос.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

  • SQL

Ключевые слова

#SQL

#EXPLAIN

#query plan

#database index

#performance optimization

Подпишись на Java Developer в телеграм