繁体   English   中英

存储数据排序:非聚集主键覆盖聚集索引

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM