【发布时间】:2015-12-20 00:28:13
【问题描述】:
我最近尝试清理一张桌子。该表有 40GB 大,索引空间为 400MB。从表中删除大量记录后,它减少到4GB,但索引空间仍然在400MB左右。我认为可能是因为删除记录时索引碎片,然后我重建索引,但索引空间仍然是398MB。我不明白,如果表大小减少了 10 倍,为什么索引空间没有按比例减少?
索引的构建
ALTER TABLE [CADIS_PROC].[DC_UPPREBBO_INFO_VALUE]
ADD PRIMARY KEY CLUSTERED (
[CADIS_ID] ASC,
[SOURCE] ASC,
[SOURCE_KEY] ASC,
[FILE_DATE] ASC )WITH
(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
重建索引的脚本
ALTER INDEX IndexName ON Schema.Table
REBUILD;
GO
我如何检查索引碎片,我也右键单击表并查看它的属性,它显示了表和索引空间的大小。
SELECT index_id, name, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID(), NULL, NULL, NULL)
该索引是表上唯一的索引,它占碎片的 0.8%。
【问题讨论】:
-
当你说你重建了索引时,你到底是怎么做到的?您还可以提供有关索引的任何详细信息,因为这也会有所帮助。
-
索引创建如下
ALTER TABLE [CADIS_PROC].[DC_UPPREBBO_INFO_VALUE] ADD PRIMARY KEY CLUSTERED ( [CADIS_ID] ASC, [SOURCE] ASC, [SOURCE_KEY] ASC, [FILE_DATE] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO我使用SQL管理工作室的选项重建索引link -
您是否还可以包含用于报告空间使用情况的命令。顺便说一句,您可能还想编辑原始问题以提供此信息。
标签: sql-server indexing database-performance sqlperformance