Сохраняет ли SQL Server «объединение» последовательно какой-либо порядок строк (т. Е. Порядок левой или правой таблицы)?
Psuedocode:
create table #p (personid bigint);
foreach (id in personid_list)
insert into #p (personid) values (id)
select id from users inner join #p on users.personid = #p.id
ПредположимУ меня есть список идентификаторов, которые соответствуют записям человека.Каждый из этих идентификаторов может соответствовать нулю или большему количеству учетных записей пользователей (поскольку у каждого пользователя может быть несколько учетных записей).
Чтобы быстро выбрать столбцы из таблицы пользователей, я заполняю временную таблицу идентификаторами лиц, а затем присоединяюсь к ней.с таблицей пользователей.
Я ищу эффективный способ убедиться, что порядок результатов в объединении соответствует порядку идентификаторов, как они были вставлены в временную таблицу, так что список пользователейвозвращается в том же порядке, что и список лиц, в котором он был введен.
Я рассмотрел следующие варианты:
- с использованием "#p inner join users", на случайпорядок левой таблицы сохраняется
- с использованием «#p пользователей левого соединения, где id не равен нулю», в случае, если левое соединение сохраняет порядок, а внутреннее объединение
- не использует «создать таблицу»(rownum int, personid bigint) ", вставляя увеличивающийся номер строки при заполнении временной таблицы, так что результаты можно упорядочить по rownum в объединении
- с использованием SQLСерверный эквивалент предложения "order by order of [tablename]", доступного в DB2
В настоящее время я использую вариант 3, и он работает ... но я ненавижу идею использования order byпункт для чего-то, что уже заказано.Я просто не знаю, сохраняет ли временная таблица порядок, в котором были вставлены строки, или как работает объединение, и в каком порядке получаются результаты.
РЕДАКТИРОВАТЬ:
Предполагается, что я идус опцией 3, поэтому есть поле для заказа ... существует ли какая-либо форма объединения, которая поможет SQL Server выполнять наименьший объем работы по поддержанию порядка.Я имею в виду, достаточно ли он умен, например, чтобы посмотреть, какие поля таблицы расположены в предложении по порядку, и сначала отработать эту таблицу при выполнении объединения, так что порядок набора результатов примерно или полностью совпадает с порядком этой таблицы, простоесли он уже в нужном порядке?