簡體   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