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