В выводе EXPLAIN вы видите оценку cost=0.00..431.00. Какой вывод аналитик может сделать безопасно?
AТочное время выполнения запроса в миллисекундах на текущей нагрузке базы
BТочное количество строк, которое запрос вернёт после фактического выполнения
CОтносительная оценка планировщика для сравнения альтернативных планов запроса
DОбъём оперативной памяти в мегабайтах, который запрос выделит на стадии исполнения
Правильный ответ.
cost в EXPLAIN — это оценка планировщика для сравнения планов, а не секунды или строки.Разбор
В Postgres-подобных СУБД cost используется планировщиком, чтобы выбрать один план из нескольких. Значения помогают прикинуть «дороже/дешевле» на одной и той же базе при схожих условиях. Но переводить cost в секунды и обещать точное время выполнения по EXPLAIN нельзя. Это не количество строк (для этого есть rows) и не объём памяти — единицы условные, привязаны к стоимости последовательного чтения страницы.
Проверь себя · 1/3разбор после ответа
Есть запрос
SELECT * FROM events WHERE user_id = 42 ORDER BY created_at DESC LIMIT 50. Какой вариант индекса чаще всего помогает, чтобы избежать Sort и быстро получить первые строки?Ещё вопросы по теме «EXPLAIN и оптимизация»
- Вы хотите добавить новый запрос в дашборд и боитесь, что он сильно нагрузит базу, потому что таблица `events` очень большая. Что даёт запуск `EXPLAIN` для этого запроса?
- В выводе `EXPLAIN` вы видите узел `Seq Scan on orders`. Что это обычно означает в плане выполнения запроса?
- В плане `EXPLAIN` для запроса по пользователю вы видите проход по индексу `orders_user_id_idx` для таблицы заказов. Какой вывод наиболее корректен?
- На большой таблице `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 и оптимизация» →