SQL 2008 - проблема порядка набора результатов - PullRequest
2 голосов
/ 31 июля 2010

Мы используем SQL Server 2008. У нас есть таблица с именем response, у которой есть первичный ключ с именем response_id. Он также имеет столбец с именем bid_id. Когда мы выполняем запрос

‘выберите * из ответа, где bid_id = x’

без «упорядочить по» мы получаем результаты в основном в порядке возрастания (по умолчанию), но время от времени в порядке убывания (очень случайно). Возможно ли в SQL, что тот же SQL-запрос может вернуть набор результатов в другом порядке, если выполняется несколько раз без заказа на? Мы использовали SQL Server 2000 до 5 месяцев назад и никогда не сталкивались с этой проблемой. SQL Server 2008 по-разному обрабатывает SQL-запросы без «упорядочить по»?

Спасибо.

Ответы [ 4 ]

9 голосов
/ 31 июля 2010

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

3 голосов
/ 31 июля 2010

Вы имеете в виду, что это происходит при различных значениях x?

Как OMG Ponies говорит заказ не гарантируется, если вы не укажете один.

В терминахобъяснения, возможно, вы получаете сканирование кластерного индекса, когда он думает, что будет существенная часть строк, соответствующих критериям bid_id = x, следовательно, они имеют порядок response_id, но он просматривает их через некластеризованный индексв столбце bid_id, когда ожидается, что меньшее количество записей будет соответствовать условию.Эти разные стратегии доступа могут привести к тому, что они будут возвращены в разных порядках.Добавление ORDER BY приведет к тому, что оно предпочтет стратегию, которая оставит их отсортированными, или добавит дополнительный шаг сортировки к плану до получения результатов.

2 голосов
/ 31 июля 2010

Всегда используйте ORDER BY, если заказ важен.

То, что кэшируется в памяти, а не на диске, влияет на порядок, в котором механизм SQL Server получает строки, и, следовательно, влияет на порядок строк, если не используется ORDER BY.

На следующем URL есть интересное, если не связанное напрямую, обсуждение по теме кеша.

http://blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache/

0 голосов
/ 31 июля 2010

Это очень распространенный вопрос.Я написал стандартный ответ:

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

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