Выбор ответа Junior SELECT и фильтрация обновлено

Порядок строк без ORDER BY

Вопрос

Запрос SELECT * FROM orders LIMIT 10 в разработке всегда возвращал заказы по возрастанию id. Что можно сказать о порядке строк?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Порядок не гарантирован и может смениться после UPDATE или смены плана. Без ORDER BY SQL не обещает никакого порядка.

Варианты ответа

  1. Порядок не гарантирован и может смениться после UPDATE или смены планаправильный ответ
  2. Порядок гарантирован, потому что id первичный ключ с индексом
  3. Порядок гарантирован, потому что строки хранятся в порядке вставки
  4. Порядок гарантирован при LIMIT: база берёт первые вставленные строки

Разбор

Без ORDER BY SQL не обещает никакого порядка. PostgreSQL отдаёт строки так, как их удобно прочитать по выбранному плану: из кучи, по индексу, параллельными воркерами. Первичный ключ не задаёт физический порядок таблицы, а UPDATE создаёт новую версию строки в другом месте. LIMIT порядок тоже не задаёт, он лишь отрезает первые строки того, что пришло.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.