ОБЪЕДИНЕНИЕ SQL Server - Каково Поведение ORDER BY по умолчанию

Простым способом было бы использовать фреймворк PHP, такой как CodeIgniter или Laravel , которые имеют встроенные функции, такие как фильтрация и активная запись, так что вам не нужно беспокоиться об этих нюансах.

36
задан Matt Fenwick 6 February 2012 в 21:17
поделиться

6 ответов

Нет никакого порядка по умолчанию.

Без Порядок пункт возвращенный порядок не определен. Это означает, что SQL Server может возвратить их в любом порядке, который он любит.

РЕДАКТИРОВАНИЕ: На основе того, чем я видел без Порядка, порядок, в котором возвращаются результаты, зависит от плана запросов. Таким образом, если существует индекс, который это использует, результат может возвратиться в том порядке, но снова нет никакой гарантии.

44
ответ дан DJ. 27 November 2019 в 05:36
поделиться

В отношении добавления пункта ORDER BY:

Это, вероятно, элементарно к больше всего здесь, но я думал, что добавляю это. Иногда Вы не хотите смешанные результаты, таким образом, Вы хотите результаты первого запроса тогда второе и так далее. Чтобы сделать это, я просто добавляю фиктивный первый столбец и порядок этим. Из-за возможных проблем с упущением исказить столбец в объединениях, я обычно использую ординалы в порядке пунктом, не имена столбцов.

, Например:

SELECT 1, * FROM xxx WHERE z = 'abc'
UNION ALL
SELECT 2, * FROM xxx WHERE z = 'def'
UNION ALL
SELECT 3, * FROM xxx WHERE z = 'ghi'
ORDER BY 1

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

15
ответ дан Will Rickards 27 November 2019 в 05:36
поделиться

Просто найденный фактическим ответом.

, поскольку ОБЪЕДИНЕНИЕ удаляет дубликаты, оно делает ОТЛИЧНЫЙ ВИД. Это сделано, прежде чем все операторы UNION связываются (проверьте план выполнения).

Для остановки вида сделайте ОБЪЕДИНЕНИЕ ВСЕ, и это также не удалит дубликаты.

11
ответ дан Ray Booysen 27 November 2019 в 05:36
поделиться

, Если Вы заботитесь о том, что заказывает, записи возвращаются, НЕОБХОДИМО использовать порядок.

при пропуске его, это май кажется организованным (на основе индексов, выбранных планом запросов), но результатами, которые Вы видите сегодня, НЕ могут быть результаты, которые Вы ожидаете, и это могло даже измениться, когда тот же запрос выполняется завтра.

Редактирование: Некоторые хорошие, определенные примеры: (всеми примерами является SQL-сервер MS)

  • , блог Dave Pinal описывает, как два очень похожих запроса могут показать различный очевидный порядок, потому что используются различные индексы:

    SELECT ContactID FROM Person.Contact
    SELECT *         FROM Person.Contact
    
  • Conor Cunningham шоу, как очевидный порядок может измениться, когда таблица становится больше (если оптимизатор запросов решает использовать параллельный план выполнения).

  • Hugo Kornelis доказывает, что очевидный порядок не всегда на основе первичного ключа. Вот его ответное письмо с объяснением.

8
ответ дан BradC 27 November 2019 в 05:36
поделиться

ОБЪЕДИНЕНИЕ может быть обманчивым относительно набора результатов, заказывающего, потому что база данных будет иногда использовать метод сортировки обеспечить ОТЛИЧНОЕ, которое неявно в ОБЪЕДИНЕНИИ, которое делает, это быть похожим на строки сознательно заказано - это не относится к ОБЪЕДИНЕНИЮ ВСЕ, для которых существует не неявно отличный, конечно.

Однако существуют алгоритмы для неявного отличного, такого как метод хеша Oracle в 10 г +, для которого не будет применено никакое упорядочивание.

, Поскольку ди-джей говорит, всегда используйте ORDER BY

2
ответ дан David Aldridge 27 November 2019 в 05:36
поделиться

Очень распространено столкнуться с плохо записанным кодом, который предполагает, что данные таблицы возвращаются в порядке вставки, и 95% времени кодер выходит сухим из воды и никогда не знает, что это - проблема как на многих общих базах данных (MSSQL, Oracle, MySQL). Это - конечно, полная ошибка и если всегда быть исправленным, когда с этим сталкиваются, и всегда, без исключения, используют Порядок пунктом самостоятельно.

1
ответ дан Cruachan 27 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

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