Вы ожидаете, что LIMIT 10 всегда означает «обработать только 10 строк». Но EXPLAIN для запроса SELECT * FROM events WHERE user_id = 42 ORDER BY created_at DESC LIMIT 10 показывает Sort по большому количеству строк перед Limit. Что это означает?

ALIMIT 10 игнорируется планировщиком, и база возвращает все строки таблицы независимо от ограничения в запросе
BБаза обязана сначала вернуть все строки клиенту, а потом приложение само применяет LIMIT 10 уже на своей стороне
CEXPLAIN запрещено использовать вместе с ORDER BY, поэтому план показывает заведомо некорректную картину выполнения
DЧтобы выбрать первые строки в нужном порядке, базе может понадобиться обработать большой набор данных, если нет подходящего индекса
Правильный ответ. LIMIT экономит работу только если план может рано остановиться, например через индекс под ORDER BY.

Разбор

Когда план включает Sort, базе всё равно нужно рассмотреть большой набор строк, чтобы понять, какие из них первые по ORDER BY. В этом случае LIMIT лишь сокращает финальный вывод, но не избавляет от основной работы. Подходящий индекс по (user_id, created_at DESC) или более селективный фильтр позволяют плану рано остановиться и сделать LIMIT реально полезным. Утверждения про игнорирование LIMIT, обязательную передачу всех строк клиенту или запрет EXPLAIN с ORDER BY неверны.

Проверь себя · 1/3разбор после ответа
Как удобнее интерпретировать дерево EXPLAIN, чтобы понять, откуда берутся строки и где тратятся ресурсы запроса?
Тренировать SQL в Telegram

Ещё вопросы по теме «EXPLAIN и оптимизация»