В плане EXPLAIN для запроса по пользователю вы видите Index Scan using orders_user_id_idx on orders. Какой вывод наиболее корректен?
AПланировщик будет искать строки по ключу в индексе, не читая всю таблицу
orders подряд.B
Index Scan гарантирует, что запрос всегда будет самым быстрым возможным.C
Index Scan означает, что результат уже отсортирован по любому столбцу.DЭто означает, что база создала временную таблицу и читает её.
Правильный ответ.
Index Scan использует индекс, чтобы быстрее найти подходящие строки.Разбор
При Index Scan база сначала проходит по индексу (например, по user_id), а затем читает нужные строки таблицы. Это особенно выгодно, когда условие WHERE выбирает малую долю данных. Но даже при наличии Index Scan реальная скорость зависит от объёма возвращаемых строк и дисковых чтений.
Проверь себя · 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 и оптимизация» →