我在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);

缩小整个数据库并不是神奇的答案。如果这个表上没有聚集索引,我强烈建议您在执行重建之前考虑一个。

09-19 17:59