У меня есть очень простая таблица, в которой хранятся заголовки для людей («Мистер», «Миссис» и т. Д.). Вот краткая версия того, что я делаю (используя временную таблицу в этом примере, но результаты совпадают):
create table #titles (
t_id tinyint not null identity(1, 1),
title varchar(20) not null,
constraint pk_titles primary key clustered (t_id),
constraint ux_titles unique nonclustered (title)
)
go
insert #titles values ('Mr')
insert #titles values ('Mrs')
insert #titles values ('Miss')
select * from #titles
drop table #titles
Обратите внимание, что первичный ключ таблицы кластеризован (явно для примера), и в столбце заголовка есть некластеризованное ограничение уникальности.
Вот результаты операции выбора:
t_id title
---- --------------------
3 Miss
1 Mr
2 Mrs
Глядя на план выполнения, SQL использует некластеризованный индекс поверх кластерного первичного ключа . Я предполагаю, что это объясняет, почему результаты возвращаются в таком порядке, но я не знаю, почему это происходит.
Есть идеи? И что более важно, есть ли способ остановить это поведение? Я хочу, чтобы строки возвращались в том порядке, в котором они были вставлены.
Спасибо!