Sql-Server

對齊索引列順序

  • October 8, 2015

**情況:**有一個 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,聚集索引基本上會在它的前面有那個列。或者和…一樣好

我希望Idfirst 會感覺更好,以防您不知道月份並且需要搜尋所有分區。它會在每個分區上尋找而不是掃描它們。

引用自:https://dba.stackexchange.com/questions/117378