Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

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

Этот вопрос проверяет умение анализировать выполнение SQL-запросов и понимание того, как СУБД использует индексы для оптимизации.

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

Чтобы проверить, используется ли индекс в запросе, нужно проанализировать план выполнения запроса. В большинстве СУБД для этого используется команда EXPLAIN (или её аналоги, как EXPLAIN ANALYZE). В выводе плана ищите операции типа 'Index Scan' или 'Index Seek', которые указывают на использование индекса. Если же вы видите 'Seq Scan' (последовательное сканирование) или 'Table Scan', значит, индекс не используется, и запрос читает всю таблицу. Также обратите внимание на оценку стоимости операций — использование индекса обычно значительно её снижает.

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

Проверка использования индексов — ключевой навык для оптимизации производительности баз данных. Индексы ускоряют поиск данных, но если запрос составлен неправильно или статистика устарела, оптимизатор СУБД может их проигнорировать, что приведёт к медленному выполнению.

Как получить план выполнения запроса

Практически все современные СУБД предоставляют команду для анализа плана запроса без его фактического выполнения. Вот основные варианты:

  • PostgreSQL, MySQL, SQLite: Используйте EXPLAIN или EXPLAIN ANALYZE (последний выполняет запрос и показывает фактические метрики).
  • Microsoft SQL Server: Включите "Include Actual Execution Plan" в интерфейсе или используйте SET SHOWPLAN_ALL ON;.
  • Oracle: Используйте команду EXPLAIN PLAN FOR.

Анализ вывода EXPLAIN

В выводе плана ищите следующие ключевые операции:

  • Index Scan / Index Seek: Прямое указание на использование индекса. Seek эффективнее, так как использует B-дерево для точного поиска, а Scan читает диапазон листьев индекса.
  • Seq Scan / Table Scan: Полное сканирование таблицы. Это красный флаг, означающий, что индекс не используется.
  • Bitmap Index Scan: Компромиссный вариант, когда используется несколько индексов или индекс для фильтрации большого объёма данных.

Также обращайте внимание на столбцы:

  • cost: Оценочная стоимость операции (чем меньше, тем лучше).
  • rows: Оценочное количество возвращаемых строк.
  • width: Средний размер строки в байтах.

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

-- Создадим тестовую таблицу и индекс
CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT, email TEXT);
CREATE INDEX idx_users_name ON users(name);

-- Запрос, который ДОЛЖЕН использовать индекс
EXPLAIN ANALYZE
SELECT * FROM users WHERE name = 'Alice';

-- Пример вывода (упрощённо):
-- ->  Index Scan using idx_users_name on users  (cost=0.15..8.17 rows=1 width=68)
--      Index Cond: (name = 'Alice'::text)

В выводе чётко видна операция "Index Scan using idx_users_name", что подтверждает использование индекса.

Почему индекс может не использоваться?

  • Неселективные условия (например, WHERE status = 'active', когда 90% строк имеют этот статус).
  • Использование функций или выражений над полем индекса (WHERE UPPER(name) = 'ALICE').
  • Отсутствие статистики или её устаревание (требуется ANALYZE).
  • Маленький размер таблицы (последовательное сканирование быстрее).

Вывод: Анализ плана выполнения через EXPLAIN — основной метод проверки использования индексов. Применяйте его для диагностики медленных запросов, чтобы убедиться, что СУБД задействует созданные индексы для фильтрации и сортировки данных, а не выполняет дорогостоящие полные сканирования таблиц.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

  • SQL

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

#SQL

#index

#query plan

#EXPLAIN

#performance tuning

#database optimization

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.