В отчёте для проверки качества данных вы используете 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 (часто по ключу).

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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