我在SQL Server中有两个表
待定
索引空间12531 MB
行数247505
数据空间1.965891 MB
表格结构:
CREATE TABLE [TbUrl](
[IdUrl] [Int] IDENTITY(1,1) NOT NULL,
[IdSupply] [Int] NOT NULL,
[Uri] [varchar](512) NOT NULL,
[UrlCod] [varchar](256) NOT NULL,
[Status] [Int] NOT NULL,
[InsertionDate] [datetime] NOT NULL,
[UpdatedDate] [datetime] NULL,
[UpdatedIp] [varchar](15) NULL
特布尔细节
索引空间29406 MB
行数234209
数据空间386047 MB
结构:
CREATE TABLE .[TbUrlDetail](
[IdUrlDetail] [Int] IDENTITY(1,1) NOT NULL,
[IdUri] [Int] NOT NULL,
[Title] [varchar](512) NOT NULL,
[Sku] [varchar](32) NOT NULL,
[MetaKeywords] [varchar](512) NOT NULL,
[MetaDescription] [varchar](512) NOT NULL,
[Price] [money] NOT NULL,
[Description] [text] NOT NULL,
[Stock] [Bit] NOT NULL,
[StarNumber] [Int] NOT NULL,
[ReviewNumber] [Int] NOT NULL,
[Category] [varchar](256) NOT NULL,
[UrlShort] [varchar](32) NULL,
[ReleaseDate] [datetime] NOT NULL,
[InsertionDate] [datetime] NOT NULL
与
TbUrl
相比,TbUrlDetail
的大小非常大表
TbUrl
的布局(设计)比TbUrlDetail
小,但数据空间则不然。我已经做了
SHRINK ON DATABASE
但是TbUrl
的空间并没有减少。会发生什么事?如何减少这张桌子的空间?
最佳答案
桌子上有聚集索引吗?(如果不是这样,您可能会遇到很多向前指针-ref)您是否对数据或数据类型或添加/删除列进行了重大更改?(如果你有那么多以前占用的空间可能无法再利用。One ref将固定长度列更改为变量不会回收空间。)
在这两种情况下,您都应该能够通过重建表(也将重建所有聚集索引)来恢复浪费的空间:
ALTER TABLE dbo.TblUrl REBUILD;
如果您使用的是企业版,则可以在线执行此操作:
ALTER TABLE dbo.TblUrl REBUILD WITH (ONLINE = ON);
缩小整个数据库并不是神奇的答案。如果这个表上没有聚集索引,我强烈建议您在执行重建之前考虑一个。