Каков порядок запроса по умолчанию, когда не используется ORDER BY
?
SQL: каков порядок запросов по умолчанию по умолчанию?
Ответ 1
Нет такого заказа. Взято из http://forums.mysql.com/read.php?21,239471,239688#msg-239688
Не зависеть от порядка, когда отсутствует ORDER BY.
Всегда указывайте ORDER BY, если вам нужен конкретный заказ - в некоторых ситуациях движок может устранить ORDER BY из-за того, как он делает некоторые другие шаги.
- GROUP BY заставляет ORDER BY. (Это нарушение стандарта. Его можно избежать, используя ORDER BY NULL.)
SELECT * FROM tbl
- это сделает "сканирование таблицы". Если таблица имеет никогда не было никаких DELETE/REPLACE/UPDATE, записи будут в порядке вставки, следовательно, то, что вы наблюдали.Если бы вы сделали то же утверждение с таблицей InnoDB, они бы были доставлены в порядке PRIMARY KEY, а не в заказе INSERT. Еще раз, это артефакт базовой реализации, а не что-то зависят от.
Ответ 2
Нет. В зависимости от того, что вы запрашиваете и как оптимизирован ваш запрос, вы можете получить любой заказ. Там даже нет гарантии, что два запроса, которые выглядят одинаково, возвратят результаты в том же порядке: если вы не укажете его, вы не сможете положиться на него.
Ответ 3
Порядок по умолчанию будет зависеть от индексов, используемых в запросе, и в каком порядке они используются. Он может меняться по мере изменения данных/статистики, и оптимизатор выбирает разные планы.
Если вам нужны данные в определенном порядке, используйте ORDER BY
Ответ 4
Я обнаружил, что SQL Server является почти случайным по умолчанию (в зависимости от возраста и сложности данных), что хорошо, поскольку оно заставляет вас указывать все заказы.
(Я смутно помню, что Oracle похож на SQL Server в этом отношении.)
MySQL по умолчанию, по-видимому, упорядочивает по структуре записи на диске (который может включать в себя элементы вне очереди из-за исключений и оптимизаций), но он часто изначально заставляет разработчиков не беспокоиться об использовании предложений порядка, поскольку появляются данные по умолчанию - порядок первичного ключа, который не случай!
Я с удивлением обнаружил сегодня, что MySQL 5.6 и 4.1 неявно подзаписывают записи, которые были отсортированы по столбцу с ограниченным разрешением в обратном направлении. Некоторые из моих результатов имеют одинаковые значения сортировки, а общий порядок непредсказуем. например в моем случае это был отсортированный DESC столбцом datetime, и некоторые из записей были в одну секунду, поэтому они не могли быть явно упорядочены. В MySQL 5.6 они выбирают в одном порядке (порядок вставки), но в 4.1 они выбирают назад! Это привело к очень раздражающей ошибке развертывания.
Я не нашел документацию об этом изменении, но нашел заметки о неявном порядке групп в MySQL:
По умолчанию MySQL сортирует все запросы GROUP BY col1, col2,..., как если бы вы также указали ORDER BY col1, col2,... в запросе.
Однако:
Использование неявной сортировки GROUP BY в MySQL 5.5 устарело. Чтобы достичь определенного порядка сортировки сгруппированных результатов, предпочтительно использовать явное предложение ORDER BY.
Таким образом, в соответствии с другими ответами - никогда не полагайтесь на умолчание или неявное упорядочение в любой базе данных.