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

AЧто LIMIT 10 игнорируется и база вернёт все строки.
BЧто база обязана сначала вернуть все строки клиенту, а потом применить LIMIT 10 на стороне приложения.
CЧто EXPLAIN запрещено использовать вместе с ORDER BY.
DЧто чтобы выбрать первые строки в нужном порядке, базе может понадобиться обработать и упорядочить большой набор данных, если нет подходящего индекса/плана; LIMIT не всегда делает запрос «дешёвым».
Правильный ответ. LIMIT экономит работу только если план может рано «остановиться» (например, через индекс под ORDER BY).

Разбор

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

Проверь себя · 1/3разбор после ответа
Вы хотите добавить новый запрос в дашборд и боитесь, что он сильно нагрузит базу, потому что таблица events очень большая. Что дает запуск EXPLAIN для этого запроса?
Тренировать SQL в Telegram

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