Как стать автором
Обновить

Комментарии 19

Переиспользование страниц в файлах базы приведет к тому, что данные таблицы без кластерного индекса будут выводиться в порядке их хранения = не по порядку добавления.
Нужен порядок на выборке — пишется order by

Вроде это не специфично для ms sql. Навскидку разве что mysql в myisam и innodb по PK отсортирует, и то без гарантий кажется

PostgreSQL вообще не сортирует результат выборки, а выдаёт в том порядке, в каком прочитал с диска. Нужен порядок — указывай ORDER BY явно.

Собственно после знакомства с ним я и стал добавлять ORDER BY почти во все запросы, результат которых отдаётся пользователю. Чаще всего ORDER BY id DESC или BY name/title/… ASC получается нужно по дефолту пользователям или их "заместителю" вроде дизайнера или продакт-оунера.

Более того, порядок записей может меняться при разных значениях LIMIT OFFSET на одном и том же запросе на одних и тех же данных. Поэтому при создании какого-нибудь GridView — обязательно указывать сортировку по-умолчанию. Многие начинающие использовать постгрес с этим сталкиваются.

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

Или то же другими словами: TL;DR: потому, что не должен
Я вот чего не понимаю. Если нам важен порядок следования записей — мы добавляем ORDER BY. Если нам он не важен — не добавляем. Как тогда может прийти в голову мысль о сохранении порядка, который нам не важен?! Какого порядка, если мы его никак не определили?

Интересно, это у меня так мозги трансформировались от длительной работы с SQL, или всё-же некая логика в моих рассуждениях есть?

Это такая реклама (антиреклама?) своеобразная у компании. У этого автора много статей с подобной ерундой)

Нет, не только у Вас.

"Почему SQL Server не гарантирует сортировку результатов, если мы запросили результаты без сортировки?"

Я решил посмотреть что за курс у ребят, попытался зарегаться, чтобы пройти "вводный тест", но смс, которая необходима для верификации телефонного номера не пришла (видимо, что проблема в том, что номер указал не +7), но пришло письмо на почту и теперь я думаю, как долго меня будут мучать рекламными письмами...

К сожалению, дефолтное поведение бывает обманчиво. Предлагаю по дефолту перемешивать результат перед выдачей.
Зачем делать лишнюю работу? Серверу, как правило, и так есть чем заняться.
Кстати, это относится и к исходному вопросу.
Вчера были по 5, но очень большие. А сегодня — по 3, но очень маленькие. Вот весь смысл поста. SQL — не бабка, судачить и придумывать не будет. Есть требование сортировки — гарантированно выполняет. Нет — выдает так, как считает оптимальным по трудоемкости выполнения.

Одно справедливо — наше наблюдение, что раки вчера были по 5 выдаваемый порядок соответствует кластерному индексу, можно смело выбрасывать в помойку — так как то, что было вчера, никак не поможет нам сегодня. Но опять же, черт побери, незнание этих нюансов не делает хорошего разработчика моделей плохим! Сортировка в отсутствие ORDER BY — это, по сути, undefined behavior. Хороший БД-модельер должен прежде всего знать не анти-, а позитивное множество средств, которыми можно эффективно автоматизировть бизнес-процессы.

Аналогия из мира схемотехники — что будет, если свободные входы логических элементов оставлять в воздухе? Чтобы ответить на этот вопрос, нужно знать особенности построения элементов различных типов — КМОП, ТТЛ, ТТЛШ. А можно просто всегда придерживаться правил, и фиксировать потенциал на свободном входе так, как предписано ТУ для микросхем, и даже не вдаваться в детали «а что будет, если..» — и это не будет признаком плохого, а будет, наоборот, признаком хорошего индустриального разработчика. При отладке, правда, нужно будет в уме построить вероятный отказ, связанный, например, с висящим в воздухе входом — но это тоже уже не тема туториала в любом случае…

Выборка и сортировка суть разные действия.


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

Не в любом. Если алгоритм выборки гарантированно сортирует по нужному критерию, то дополнительных расходов нет.

Еще раз. Выборка и сортировка разные действия.


Алгоритм выборки… сортирует

Хотите сказать сортировка вставкой? Приемлем на малых выборках.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий