Вы строите виджет «последние события» и используете ORDER BY created_at DESC LIMIT 100. В created_at много одинаковых значений, и пользователи жалуются, что список «дрожит». Какое изменение лучше всего повышает стабильность результата, не ломая идею оптимизации через индекс?

AУбрать ORDER BY, оставив только LIMIT 100.
BЗаменить LIMIT 100 на OFFSET 100.
CДобавить DISTINCT ко всем колонкам, чтобы порядок закрепился.
DСделать порядок детерминированным, например ORDER BY created_at DESC, event_id DESC LIMIT 100 (и при необходимости иметь индекс, который поддерживает такой порядок).
Правильный ответ. Для стабильного LIMIT нужен детерминированный ORDER BY с tie-breaker.

Разбор

Если сортировка идёт только по created_at, то строки с одинаковым временем могут возвращаться в разном порядке в разных запусках — SQL это не запрещает. Добавление второго ключа (например, event_id) делает порядок однозначным. При хорошем индексе по (created_at, event_id) или похожем порядке оптимизация через чтение из индекса может сохраниться.

Проверь себя · 1/3разбор после ответа
На большой таблице events запрос SELECT * FROM events ORDER BY created_at DESC LIMIT 100 неожиданно работает быстро. Какое объяснение наиболее вероятно при наличии индекса по created_at?
Тренировать SQL в Telegram

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