2013-02-26 1 views
1

У меня есть интересный вопрос: У меня есть функция, которая получает целую целую цепочку целых чисел.Порядок результатов для a select

Вот 2 исполнения:

select ID from dbo.udf_NumList2table ('124,126,132,180,176') 
select RP.ID, My.ID 
from dbo.udf_NumList2table ('124,126,132,180,176') RP join MyTable My 
     on RP.ID=My.ID 

В первом исполнении порядок результатов подобен порядку чисел в строке. Во втором исполнении порядок результатов возрастает (176 до 180).

Почему? Я думаю, что PK на идентификаторе столбца в MyTable является причиной - SQL предпочитает запускать ключ.

Правильно ли я?

ответ

2

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

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

Чтобы получить последовательный заказ, вы должны использовать пункт ORDER BY.

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