Sql-Server
對齊索引列順序
**情況:**有一個 SQL Server (2014) 數據庫具有多個分區表,它們都共享相同的分區策略。表具有每個唯一的分區
[PartitionKey]
。每一個[Id]
都是唯一的,每個表的列[PartitionKey]
被重用大約 2000 萬次,但每個唯一值不會分佈在不同的分區上。[PartitionKey]
是一個格式化的日期 (yyyyMM),儲存為int
.表定義
CREATE TABLE [dbo].[Table1]( [Id] [uniqueidentifier] NOT NULL, [PartitionKey] [int] NOT NULL, [CreationDate] [datetime] null, CONSTRAINT [PK_NC_Table1] PRIMARY KEY NONCLUSTERED ( [Id] ASC ))
考慮以下查詢:
查詢 1:搜尋唯一結果(最重要)
SELECT t1.id, t2.PartitionKey FROM Table1 t1 WHERE t1.id = @id and t1.PartitionKey = @partitionKey
查詢 2:在一個分區內搜尋一系列數據
SELECT t1.id, t2.PartitionKey FROM Table1 t1 WHERE t1.PartitionKey = @partitionKey AND t1.CreationDate > @creationDate
分區聚集索引的順序是否重要?如果是這樣,它如何影響性能以及最適合我的情況的順序?
對齊索引:
[Id]
第一CREATE CLUSTERED INDEX [CI_Id_PartitionKey] ON [dbo].[Table1] ( [Id], [PartitionKey] ) ON [PartitionKeyScheme]([PartitionKey])
對齊索引:
[PartitionKey]
第一CREATE CLUSTERED INDEX [CI_Id_PartitionKey] ON [dbo].[Table1] ( [PartitionKey], [Id] ) ON [PartitionKeyScheme]([PartitionKey])
您需要將分區視為單獨的表。
分區表上的聚集索引實際上將分區號作為其第一個鍵。對你來說,每個 unique 都有一個分區
PartitionKey
,聚集索引基本上會在它的前面有那個列。或者和…一樣好我希望
Id
first 會感覺更好,以防您不知道月份並且需要搜尋所有分區。它會在每個分區上尋找而不是掃描它們。