2010-01-19 3 views
2

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

Можно ли зависеть от индекса для сортировки?

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

Благодаря

+0

Забыл упомянуть iam, используя приложение asp.net для доступа к данным – Prady

ответ

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

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

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

  • Следовательно, всегда ORDER BY, даже если он вам не нужен.

+0

Статья о кластеризованных индексах в MSDN http://msdn.microsoft.com/en-us/library/aa933131%28SQL.80%29.aspx – keith

1

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

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

1

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

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

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

1

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

1

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

0

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

Смежные вопросы