1

我在 SQL Server 中有 2 个表

网址

  • 索引空间 12,531 MB
  • 行数 247505
  • 数据空间 1.965,891 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

TbUrl详细信息

  • 索引空间 29,406 MB
  • 行数 234209
  • 数据空间 386,047 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并没有减少。

可能会发生什么?如何减少此表的空间?

4

2 回答 2

3

表上有聚集索引吗?(如果不是,您可能会遇到很多前向指针 -参考。)您是否对数据或数据类型进行了重大更改或添加/删除了列?(如果您有很多以前占用的空间可能无法重新使用。一个参考将固定长度的 col 更改为变量不会回收空间。)

在这两种情况下,您都应该能够通过重建表来恢复浪费的空间(这也将重建所有聚集索引):

ALTER TABLE dbo.TblUrl REBUILD;

如果您使用的是企业版,则可以在线执行此操作:

ALTER TABLE dbo.TblUrl REBUILD WITH (ONLINE = ON);

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

于 2012-05-03T15:07:27.687 回答
0

With VARCHAR() fields, the amount of space actually taken does vary according to the amount of text put in those fields.

Could you perhaps have (on average) much shorter entries in one table than in the other?

Try

SELECT
  SUM(CAST(LENGTH(uri) + LENGTH(urlcod) AS BIGINT)) AS character_count
FROM
  TbUrl

SELECT
  SUM(CAST(LENGTH(title) + LENGTH(metakeywords) + LENGTH(metadescription) + LENGTH(Category) AS BIGINT)) AS character_count
FROM
  TbUrlDetail
于 2012-05-03T15:08:33.917 回答