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

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

Разбор

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

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

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