[英]stored data sorting: nonclustered primary key overrides clustered index
我需要创建一个带有非聚集主键的表(将其他表上的外键设置为它)和一个聚集索引以按预期顺序存储数据。
但是,结果存储的数据按主键的顺序排序,而不是按索引的顺序排序。
有没有办法防止这种情况发生? 这是一个示例(SQL Server 14.0 RTM):
create table dbo.a (
x nvarchar(50) not null
,y nvarchar(100) not null
,index ix_a clustered (y)
,constraint pk_a primary key nonclustered (x)
)
insert dbo.a
values
('d','p')
,('c','q');
select * from dbo.a
结果应该先用 p 排序,然后是 q。 但是,q 在第一行,p 在第二行。
在类似的情况下,当主键在 2 列而不是只有 1 列时,这种方法有效。
你很困惑。 这个查询:
select *
from dbo.a
不会告诉您有关表的“排序”的任何信息。 没有ORDER BY
SQL 表以不确定的顺序返回行。 我也坦率地承认,如果表中有几行,这将与数据的实际排序高度相关,但我强烈建议您不要按照这些思路思考。
如果你想知道实际的排序,你需要在数据页面上达到峰值。 或者您也许可以使用执行计划来查看是否正在使用索引而不是排序。
我认为您所看到的是 SQL Server 选择使用主键索引从查询中返回行。 表中有两行,实际的执行计划并不重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.