![](/img/trans.png)
[英]Composite clustered index and non clustered index in sql server 2005
[英]SQL Server 2005 - odd clustered index size
CREATE TABLE [MYTABLE](
[ROW1] [numeric](18, 0) NOT NULL,
[ROW2] [numeric](18, 0) NOT NULL,
[ROW3] [numeric](18, 0) NOT NULL,
[ROW4] [numeric](18, 0) NULL,
CONSTRAINT [MYTABLE_PK] PRIMARY KEY CLUSTERED ([ROW1] ASC, [ROW2] ASC, [ROW3] ASC)
)
該表具有2個非聚集索引以及以下統計信息:
RowCount: 5260744
Data Space: 229.609 MB
Index Space: 432.125 MB
我想減少索引的大小,並使用代理主鍵作為聚簇索引,而不是自然組合鍵。
CREATE TABLE [dbo].[TEST_RUN_INFO](
[ROW1] [numeric](18, 0) NOT NULL,
[ROW2] [numeric](18, 0) NOT NULL,
[ROW3] [numeric](18, 0) NOT NULL,
[ROW4] [numeric](18, 0) NULL,
[ID] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [MYTABLE_PK] PRIMARY KEY CLUSTERED ([ID] ASC)
)
仍然只有2個非聚集索引,這是新的統計信息:
RowCount: 5260744
Data Space: 249.117 MB
Index Space: 470.867 MB
有人可以解釋使用3個NUMERIC(18,0)列的聚集索引比使用單個INT列的聚集索引小嗎?
我在更改前后重建了索引,並且兩種結構的填充因子均設置為0。
這兩個非聚集索引相同,並且未更改為包括新的ID列。
使用ID列獲取的統計信息
復合聚類索引
INDEX TYPE DEPTH LEVEL PAGECOUNT RECORDCOUNT RECORDSIZE
1 CLUSTERED 3 0 31884 5260744 47
1 CLUSTERED 3 1 143 31884 34
1 CLUSTERED 3 2 1 143 34
5 NONCLUSTERED 3 0 27404 5260744 40
5 NONCLUSTERED 3 1 167 27404 46
5 NONCLUSTERED 3 2 1 167 46
6 NONCLUSTERED 3 0 27400 5260744 40
6 NONCLUSTERED 3 1 164 27400 46
6 NONCLUSTERED 3 2 1 164 46
INT聚集索引
INDEX TYPE DEPTH LEVEL PAGECOUNT RECORDCOUNT RECORDSIZE
1 CLUSTERED 3 0 31887 5260744 47
1 CLUSTERED 3 1 54 31887 11
1 CLUSTERED 3 2 1 54 11
5 NONCLUSTERED 4 0 29893 5260744 44
5 NONCLUSTERED 4 1 198 29893 50
5 NONCLUSTERED 4 2 3 198 50
5 NONCLUSTERED 4 3 1 3 50
6 NONCLUSTERED 4 0 29891 5260744 44
6 NONCLUSTERED 4 1 193 29891 50
6 NONCLUSTERED 4 2 2 193 50
6 NONCLUSTERED 4 3 1 2 50
聚簇索引葉頁面包括表的所有列(而不僅僅是鍵列)。 通過添加代理主鍵,您剛剛將葉子頁中所有行的長度增加了4個字節。 將其乘以5,260,744行,即等於另外20 MB以存儲ID
列。
但是,鍵較窄,因此您可能會擁有較少的非葉級頁面(請使用sys.dm_db_index_physical_stats
進行查看),並且由於將聚簇索引鍵用作非聚簇索引中的行定位符,因此可以使那些變小(但覆蓋范圍較小) )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.