Почему SQL Server использует некластеризованный индекс по кластеризованному PK в операции «select *»?

У меня есть очень простая таблица, в которой хранятся заголовки для людей («Мистер», «Миссис» и т. Д.). Вот краткая версия того, что я делаю (в этом примере используется временная таблица, но результаты те же):

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 использует некластеризованный индекс по кластеризованному первичному ключу . Я предположение, это объясняет, почему результаты возвращаются в таком порядке, но я не знаю, почему это происходит.

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

Спасибо!

5
задан gerrod 4 August 2011 в 06:09
поделиться