В плане EXPLAIN для запроса по пользователю вы видите проход по индексу orders_user_id_idx для таблицы заказов. Какой вывод наиболее корректен?
AПланировщик использует индекс, чтобы найти подходящие строки по ключу, не читая всю таблицу заказов целиком
BТакой план гарантирует, что запрос всегда выполнится максимально быстро среди всех возможных способов исполнения
CТакой план означает, что результат уже отсортирован по любому столбцу таблицы заказов без дополнительных операций
DТакой план означает, что база создала временную таблицу заказов и теперь читает её последовательно при каждом запросе
Правильный ответ. Проход по индексу позволяет найти подходящие строки быстрее, чем последовательное сканирование всей таблицы.
Разбор
При проходе по индексу база сначала находит подходящие записи в индексе (например, по идентификатору пользователя), а затем читает соответствующие строки таблицы. Это особенно выгодно, когда условие в WHERE отбирает малую долю строк. Реальная скорость зависит от объёма возвращаемых данных и количества дисковых чтений, поэтому проход по индексу не является автоматической гарантией максимальной производительности.
Проверь себя · 1/3разбор после ответа
Есть индекс по
orders.created_at, но EXPLAIN для фильтра WHERE date(created_at) = current_date показывает Seq Scan. Почему это часто происходит?Ещё вопросы по теме «EXPLAIN и оптимизация»
- Вы хотите добавить новый запрос в дашборд и боитесь, что он сильно нагрузит базу, потому что таблица `events` очень большая. Что даёт запуск `EXPLAIN` для этого запроса?
- В выводе `EXPLAIN` вы видите узел `Seq Scan on orders`. Что это обычно означает в плане выполнения запроса?
- На большой таблице `events` запрос `SELECT * FROM events ORDER BY created_at DESC LIMIT 100` неожиданно работает быстро. Какое объяснение наиболее вероятно при наличии индекса по `created_at`?
- Есть индекс по `orders.created_at`, но `EXPLAIN` для фильтра `WHERE date(created_at) = current_date` показывает `Seq Scan`. Почему это часто происходит?
- В выводе `EXPLAIN` вы видите оценку `cost=0.00..431.00`. Какой вывод аналитик может сделать безопасно?
- Все вопросы по «EXPLAIN и оптимизация» →