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

Заказ строк по умолчанию для выбора запроса в oracle

В Oracle, каков порядок упорядочения строк по умолчанию для запроса выбора, если не указано предложение "order by".

Это

  • порядок, в который были вставлены строки
  • отсутствует порядок по умолчанию
  • Ничего из перечисленного.
4b9b3361

Ответ 1

По словам Тома Ките: "Пока и до тех пор, пока вы не добавите" запрос "к запросу, вы не можете сказать" НИЧЕГО "о порядке возвращаемых строк. Ну, если не считать" вы не можете полагаться на порядок возвращаемых строк "".

Смотрите этот вопрос на asktom.com.

Что касается ROWNUM, он физически не существует, поэтому его нельзя "освободить". ROWNUM назначается после того, как запись извлекается из таблицы, поэтому "WHERE ROWNUM = 5" всегда будет не в состоянии выбрать какие-либо записи.

@ammoQ: вы можете прочитать эту статью AskTom о заказе GROUP BY. Короче говоря:

Предоставляет ли условие Group By в гостевом клиенте, что выходные данные будут   сортировка по столбцам группы по столбцам   порядок, даже если нет заказа   статья?

и мы сказали...

АБСОЛЮТНО НЕ,

Это никогда не было, это никогда не было, это никогда будет.

Ответ 2

Нет явного упорядочения по умолчанию. По понятным причинам, если вы создаете новую таблицу, вставьте несколько строк и сделайте "select *" без предложения "where", она (очень вероятно) вернет строки в том порядке, в котором они были вставлены.

Но вы никогда не должны полагаться на заказ по умолчанию. Если вам нужен конкретный заказ, используйте предложение "order by". Например, в версиях Oracle до 9i выполнение "group by" также приводило к сортировке строк по групповому выражению. В 10g этого поведения больше не существует! Из-за этого обновление ОС Oracle привело к некоторой работе.

Ответ 3

Уже было сказано, что Oracle может предоставить вам строки в любом порядке, если он не хочет указывать предложение ORDER BY. Высказывание того, каким будет порядок, когда вы не укажете предложение ORDER BY, бессмысленно. И полагаясь на это в вашем коде, это "ограничение карьеры".

Простой пример:

SQL> create table t as select level id from dual connect by level <= 10
  2  /

Tabel is aangemaakt.

SQL> select id from t
  2  /

        ID
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10

10 rijen zijn geselecteerd.

SQL> delete t where id = 6
  2  /

1 rij is verwijderd.

SQL> insert into t values (6)
  2  /

1 rij is aangemaakt.

SQL> select id from t
  2  /

        ID
----------
         1
         2
         3
         4
         5
         7
         8
         9
        10
         6

10 rijen zijn geselecteerd.

И это только после простой вставки delete+. И есть множество других ситуаций, мыслимых. Параллельное выполнение, разделы, индексированные таблицы, чтобы назвать только несколько.

Нижняя строка, как уже очень хорошо сказано ammoQ: если вам нужны отсортированные строки, используйте предложение ORDER BY.

Ответ 4

Вы абсолютно, положительно не можете полагаться на какие-либо заказы, если не укажете order by. Для Oracle, в частности, я действительно видел тот же самый запрос (без объединений), дважды выполняемый за несколько секунд друг от друга, в таблице, которая не менялась промежуточный период, возвращает совершенно другой порядок. Это кажется более вероятным, когда результирующий набор является большим.

Параллельное исполнение, упомянутое Роб ван Вийком, возможно, объясняет это. См. Также Oracle Использование параллельного выполнения doc.

Ответ 5

Вы можете изменить порядок, в котором данные хранятся в таблице с помощью INSERT с предложением ORGANIZATION оператора CREATE TABLE

Ответ 6

На него влияет индекс, если есть индекс, он вернет восходящий порядок, если нет никакого индекса, он вернет введенный порядок.

Ответ 7

Хотя, он должен быть rownnum (ваш # 2), он действительно не гарантируется, и вы не должны доверять ему 100%.

Ответ 8

Я считаю, что он использует атрибут Oracle hidden Rownum.

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

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