簡體   English   中英

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列。

sys.dm_db_index_physical_stats

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM