Подтвердить что ты не робот

SQL: каков порядок запросов по умолчанию по умолчанию?

Каков порядок запроса по умолчанию, когда не используется ORDER BY?

4b9b3361

Ответ 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.

Таким образом, в соответствии с другими ответами - никогда не полагайтесь на умолчание или неявное упорядочение в любой базе данных.