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