我有一个非常简单的表格,用于存储人们的标题(“先生”、“夫人”等)。这是我正在做的事情的简要版本(在这个例子中使用了一个临时表,但结果是一样的):
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 使用非聚集索引而不是聚集主键。我猜这解释了为什么结果按此顺序返回,但我不知道为什么会这样。
有任何想法吗?更重要的是,有什么方法可以阻止这种行为?我希望按照插入的顺序返回行。
谢谢!