В EXPLAIN вы видите оценку rows=10, но по смыслу запроса ожидаете тысячи строк. Какое объяснение и следующий шаг наиболее разумны?

AЭто может быть ошибка оценок (статистика/распределение данных), из‑за чего план может быть неоптимальным; стоит проверить реальную кардинальность (например, через EXPLAIN ANALYZE) и при необходимости обновить статистику (ANALYZE) или уточнить фильтр.
BСкорее всего, статистика корректна, а оценка rows=10 означает, что индекс слишком селективен; нужно добавить составной индекс на колонки фильтра и перезапустить запрос без изменений.
CВероятно, JOIN отфильтровал лишние строки из-за несовпадения типов; следует привести типы ключей JOIN к одному типу и затем проверить план через EXPLAIN повторно.
DСкорее всего, rows отражает количество строк после применения LIMIT; нужно убрать LIMIT из запроса, чтобы планировщик показал реальный объём данных.
Правильный ответ. Сильные расхождения в rows — повод подозревать неверные оценки и возможный плохой план.

Разбор

rows в EXPLAIN — это прогноз планировщика. Если он сильно не совпадает с реальностью, оптимизатор может выбрать неправильный тип скана или порядок соединений. Для аналитика полезно: (1) подтвердить факт через EXPLAIN ANALYZE на безопасном окружении и (2) договориться об обновлении статистики (ANALYZE) или переписать условия так, чтобы оценки стали точнее.

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

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