@Multigame

Сохраняется ли порядок в результате запроса без Order By?

Насколько я понимаю, если в запросе отсутствует Order BY то записи из таблицы выдаются в порядке физической записи.
Имеем запрос, простой select из одной таблицы без условий и сортировок. Значения в PK-аттрибуте идут вразнобой, но визуально, если выполнить запрос несколько раз, порядок сохраняется...

Вопрос: Действительно ли порядок возвращаемых кортежей сохраняется? Если в таблицу добавлены новые записи, они могут влезть в середину не сортированной выдачи или строго в конец?

(innodb)
  • Вопрос задан
  • 290 просмотров
Решения вопроса 1
madmages
@madmages
Человек прямоходящий
коротко - нет
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Ну совсем основы это.
Без order by порядок произвольный.
При order by по не уникальном полю - порядок подсортировки произвольный, используйте несколько сортировок одновременно.
Изменение порядка связано с текущим состояние сервера, кешей итд - даже при "одновременно" выполненных запросах - порядок кортежей в выдаче может отличаться если нет сортировки!
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Без указания ORDER BY порядок выдачи строк не гарантируется. Удаление или изменение строк может изменить порядок. Кроме того, привязка к порядковому номеру строки в таблице - нарушение нормальной формы.
Ответ написан
Комментировать
@dredd_krd
InnoDB - таблица без особых оптимизаций и сжатий. Если из середины удаляется запись - место под неё просто остается, не дефрагментируясь, и при следующем insert-е запись может упасть в это место в середине (чтоб не пустовало). Когда же где-нибудь в середине место заканчивается, записи начинают падать в конец. Поэтому, насколько я понимаю, при последовательном проходе (при выборке без условий) записи могут выбираться так, как находятся в файле базы, да. Да и сам такое поведение замечал неоднократно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы