SQL-Server-2005: почему результаты возвращаются в другом порядке с помощью (nolock) - PullRequest
0 голосов
/ 07 сентября 2011

у меня есть кластерный индекс первичного ключа в столбце col1

, почему при выполнении следующих операторов результаты возвращаются в другом порядке

select * from table

против

select * from table with(nolock)

результаты также отличаются от схемы tablock

:

col1 int not null
col2 varchar (8000)

Ответы [ 4 ]

4 голосов
/ 07 сентября 2011

Без ORDER BY порядок результатов не гарантируется.

Ваш вопрос теперь сильно обрезан, но в оригинальной версии упоминалось, что при использовании nolock и tablock.

вы видели другой порядок результатов.

Обе эти опции блокировки позволяют SQL Server использовать сканирование порядка размещения вместо чтения по страницам данных кластерного индекса в логическом порядке (следуя указателям по связанному списку).

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

3 голосов
/ 07 сентября 2011

Порядок строк никогда не гарантируется, если вы не используете ORDER BY.

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

Если вы отказываетесь от заказа СУБД, вы можете свободно возвращать строки в любом порядке, который она считает наиболее эффективным

1 голос
/ 07 сентября 2011

Sql Server не дает никаких гарантий относительно заказа, он будет меняться в зависимости от того, как Sql Server оптимизирует запрос.

Чтобы гарантировать заказ, необходимо использовать пункт order by.

0 голосов
/ 07 сентября 2011

, если вы не указали заказ, он полностью недетерминирован. Сегодня они могут быть разными, завтра, возможно, нет.

Предоставление подсказки может непреднамеренно направить оптимизатор запросов по более эффективному пути.

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