Сохраняется ли порядок в результате запроса без Order By?
Насколько я понимаю, если в запросе отсутствует Order BY то записи из таблицы выдаются в порядке физической записи.
Имеем запрос, простой select из одной таблицы без условий и сортировок. Значения в PK-аттрибуте идут вразнобой, но визуально, если выполнить запрос несколько раз, порядок сохраняется...
Вопрос: Действительно ли порядок возвращаемых кортежей сохраняется? Если в таблицу добавлены новые записи, они могут влезть в середину не сортированной выдачи или строго в конец?
Ну совсем основы это.
Без order by порядок произвольный.
При order by по не уникальном полю - порядок подсортировки произвольный, используйте несколько сортировок одновременно.
Изменение порядка связано с текущим состояние сервера, кешей итд - даже при "одновременно" выполненных запросах - порядок кортежей в выдаче может отличаться если нет сортировки!
Для правильного вопроса надо знать половину ответа
Без указания ORDER BY порядок выдачи строк не гарантируется. Удаление или изменение строк может изменить порядок. Кроме того, привязка к порядковому номеру строки в таблице - нарушение нормальной формы.
InnoDB - таблица без особых оптимизаций и сжатий. Если из середины удаляется запись - место под неё просто остается, не дефрагментируясь, и при следующем insert-е запись может упасть в это место в середине (чтоб не пустовало). Когда же где-нибудь в середине место заканчивается, записи начинают падать в конец. Поэтому, насколько я понимаю, при последовательном проходе (при выборке без условий) записи могут выбираться так, как находятся в файле базы, да. Да и сам такое поведение замечал неоднократно.
т.е. если у нас хранилище без удаления, то в принципе можно предполагать что выдача изменяться не будет...
Вопрос еще в том, выделяется ли место под INSERT IGNORE... есть подозрение что да...