В отчёте для проверки качества данных вы используете SELECT user_id FROM users LIMIT 100 и замечаете, что набор пользователей меняется между запусками. Почему это ожидаемо?

AПотому что LIMIT сам по себе делает равномерную случайную выборку из всех строк таблицы пользователей
BПотому что без ORDER BY СУБД всегда возвращает строки в порядке возрастания первичного ключа user_id
CПотому что SELECT без WHERE обязан вернуть строки в порядке физической вставки и не пересортировывать
DПотому что без ORDER BY порядок строк не гарантирован, и LIMIT может выдать разный набор при изменении плана или индексов
Правильный ответ. LIMIT без ORDER BY не даёт стабильного набора строк.

Разбор

SQL по умолчанию не гарантирует порядок строк, если вы явно не указали ORDER BY. Поэтому LIMIT просто обрезает «как получилось» — порядок может зависеть от плана выполнения, физического расположения строк и других факторов. Если нужен воспроизводимый результат, добавьте детерминирующий ORDER BY (часто по ключу).

Проверь себя · 1/3разбор после ответа
Есть запрос SELECT * FROM events WHERE user_id = 42 ORDER BY created_at DESC LIMIT 50. Какой вариант индекса чаще всего помогает, чтобы избежать Sort и быстро получить первые строки?
Тренировать SQL в Telegram

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