Сортировка по индексам - PullRequest
       7

Сортировка по индексам

2 голосов
/ 19 января 2010

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

Разумно ли зависеть от индекса для сортировки?

Лучше ли полагаться на индекс для сортировки?

Спасибо

Ответы [ 6 ]

3 голосов
/ 19 января 2010
  • Да, данные отображаются предварительно отсортированными из-за кластеризованного индекса. Кластерный индекс означает, что строки физически расположены в порядке индекса, который в большинстве (не во всех) случаях является способом их извлечения.

  • Если нет кластеризованного индекса, строки будут извлечены в том же порядке, в котором они были вставлены.

  • Нет, не стоит полагаться на это. Если вы решите сделать JOIN, DISTINCT или внести другие изменения в запрос, вы можете легко нарушить порядок сортировки. С другой стороны, если вы используете ORDER BY и SQL Server знает, что данные уже в этом порядке, он оптимизирует избыточную сортировку и, следовательно, ничего не будет стоить.

  • Поэтому всегда ORDER BY, даже если кажется, что он вам не нужен.

1 голос
/ 19 января 2010

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

1 голос
/ 19 января 2010

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

1 голос
/ 19 января 2010

Мой запрос возвращает результат запроса, который, по-видимому, отсортирован, хотя нет порядка по операторам.

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

Индекс может ускорить то, как быстро упорядочен запрос, но он не оказывает влияния, если нет условия ORDER BY, которое использует столбец (столбцы) с индексами на них.

1 голос
/ 19 января 2010

Если вам нужен конкретный порядок сортировки, рекомендуется указывать его с помощью предложения ORDER BY.

Для чего бы то ни было, почти каждая реализация базы данных, которую я когда-либо использовал, будет демонстрировать некоторый разумно повторяемый порядок сортировки, несмотря на отсутствие условия ORDER BY, но такое поведение является побочным эффектом работы базы данных под прикрытием. Дело в том, что базы данных (опять же, те, с которыми я работал) не гарантируют порядок сортировки, если вы не укажете его, поэтому, не указав его, вы зависите от реализации базы данных и любых побочных эффектов, которые она может вызвать , По сути, если вам нужно, чтобы записи возвращались полностью предсказуемым образом, вы должны указать их.

0 голосов
/ 19 января 2010

Данные могут показаться отсортированными, но вы не можете полагаться на это. Предположим, у вас есть некоторые данные, которые вам нужны, в ОЗУ, в то время как остальные находятся на диске. Система может идти параллельно и начать возвращать данные, находящиеся в памяти, а остальное извлекается с диска и возвращается. Вы просто не можете полагаться на это, и вам, безусловно, следует упорядочить свои данные, если они вам потребуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...