1

SQL Server に 2 つのテーブルがあります

TbUrl

  • インデックス容量 12,531MB
  • 行数 247505
  • データ容量 1.965,891MB

テーブル構造:

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

TbUrlDetail

  • インデックス容量 29,406MB
  • 行数 234209
  • データ容量 386,047MB

構造:

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

テーブルにクラスター化インデックスはありますか? (そうでない場合は、多くのフォワード ポインターに悩まされる可能性があります - ref。) データやデータ型に大幅な変更を加えたり、列を追加/削除したりしましたか? (その場合、以前に占有されていた多くのスペースを再利用できない場合があります。固定長の列を変数に変更しても、スペースが再利用されない参照が 1 つあります。)

どちらの場合も、テーブルを再構築することで無駄な領域を回復できるはずです (これにより、すべてのクラスター化インデックスも再構築されます)。

ALTER TABLE dbo.TblUrl REBUILD;

Enterprise Edition を使用している場合は、オンラインでこれを行うことができます。

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

データベース全体を縮小することは、ここでの魔法の答えではありません。このテーブルにクラスター化インデックスがない場合は、再構築を実行する前に検討することを強くお勧めします。

于 2012-05-03T15:07:27.687 に答える
0

VARCHAR() フィールドでは、実際に使用されるスペースの量は、それらのフィールドに入力されたテキストの量によって異なります。

あるテーブルのエントリが他のテーブルよりも (平均して) はるかに短い可能性がありますか?

試す

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 に答える