Хобрук: Ваш путь к мастерству в программировании

Упорядочивает ли SQL Server произвольные результаты последовательно?

Предположим, у меня есть таблица с 2 столбцами и 3 строками:

A|B
1|1
1|2
1|3

и я пишу

SELECT TOP 1 B FROM MyTable ORDER BY A

SQL Server произвольно выберет возвращаемое значение. Но, похоже, он постоянно возвращает одно и то же произвольное значение независимо от того, сколько раз я его запускаю. Есть ли способ выяснить, какое значение он выберет? Есть ли способ узнать, будет ли он продолжать выбирать то же значение в будущем? Есть ли способ узнать, выбирало ли оно одно и то же значение в прошлом?

Я спрашиваю, потому что хочу угадать прошлое поведение какого-то уродливого устаревшего кода.


  • Я бы предположил (что, вероятно, не должен), что сортировка основана на том, что данные на любой странице в памяти, с которой они считываются, сортируются. Итак, пока индекс или таблица не изменились, включая данные, было бы разумно предположить (и снова), что они вернутся прежними. Тем не менее, я бы не стал доверять этому, так как это все предположения. 14.03.2019
  • Возможный дубликат неупорядоченных результатов в SQL 15.03.2019
  • Я просто пометил это как возможный дубликат. Что бы ни решили моды, вы должны проверить ссылку. Там тонна хороших вещей. 15.03.2019

Ответы:


1

Порядок в этом случае не гарантируется.

Вы будете стремиться получать те же результаты, но есть несколько моментов, которые могут их изменить. Я могу вспомнить четыре примера навскидку, но, вероятно, есть и другие:

  1. Если вы измените индексацию на таблице
  2. В Enterprise Edition Расширенное сканирование может использовать уже выполняющееся сканирование таблицы или индекса для другого запроса, где вдруг «верхний» результат отличается.
  3. Если таблица достаточно велика для нескольких страниц, и в один прекрасный день у вас уже есть другая страница в памяти, чем раньше.
  4. Если таблица хранится в порядке (A, B), но у вас есть индекс на (A, B DESC), вы можете получить другой результат в зависимости от того, загружена ли уже таблица или индекс в память.

Обратите внимание, что некоторые из них могут привести к внезапному изменению результатов, если из-за нехватки памяти Sql Server выгрузит соответствующую страницу.

В более общем случае думайте не только об одном запросе к таблице, но и о множестве разных запросов к одним и тем же неупорядоченным данным. Например, если вы присоединяетесь к этой таблице на основе критериев из другой таблицы, которая соответствует индексу, Sql Server может вернуть первый найденный совпадающий результат, и это может быть другая строка для соединения, чем для необработанного запроса. , просто потому, что соединение хорошо совпадает с другим индексом.

Короче говоря, если это имеет значение, будьте более строги с предложением ORDER BY.

14.03.2019
Новые материалы

Почему я, журналист, в отчаянии создал сетевое приложение B2B
Почему я, журналист, в отчаянии создал сетевое приложение B2B Итак, вот верхняя линия. Я построил OnGreentech, сеть для индустрии возобновляемых источников энергии. Если вам интересно,..

Ограниченные машины Больцмана (RBM)
Практическое руководство по обучению RBM.pdf Задний план RBM использовались в качестве генеративных моделей для многих различных типов данных, включая помеченные и немеченые. В их условной..

Обнаружение маски или без маски с YOLO😷
Это руководство по созданию пользовательской модели обнаружения объектов для обнаружения людей, носящих или не носящих маски в общественных местах, созданной с использованием YOLO v3. Модель..

Управление приборами в чистом PHP
Этот пост дополняет эти: E2e тестирование Работа с несколькими средами . Мы разработали это решение для базы данных MariaDB, оно может отличаться, если вы используете другую базу..

Неделя 1 — Кентерберийские рельсы.
Неделя 1 — Кентерберийские рельсы. So. Мы все еще живы, все еще усердно работаем и еще не пассивно-агрессивно рассылаем друг другу сообщения «за мое последнее сообщение в Slack…», поэтому, на..

Цена завтрашнего дня  — Джефф Бут
Технологический прогресс в наши дни происходит с молниеносной скоростью, и мы не в состоянии это понять. Джефф в основном говорит о влиянии технологий на экономику по всему миру. Он твердо верит..

Данные: суперсила современного бизнеса
В цифровой среде данные превратились из простого побочного продукта бизнес-операций в центральный актив, стимулирующий рост и инновации. Крейг Манди, бывший главный директор по стратегии..