2014-01-06 36 views
0

有一個SQL表正在快速增長,並且與內在數據相比不一致。爲了簡短起見,本表中有一個用於備份.txt文件內容的Windows服務,文件大小約爲1KB到45KB。因此用於存儲這些文本文件內容的nvarchar(max)列。SQL表增長不一致

在此表上運行的註釋sp_spaceused命令,這裏是結果:

name rows reserved  data  index_size unused 
Files 20402 814872 KB 813416 KB  1048 KB  408 KB 

但運行這個簡單的查詢,這給了我以字節爲單位由本表中使用的總數據量時,其結果是不在任何附近:(97231108字節)。

SELECT (SUM(DATALENGTH(A)) + 
     SUM(DATALENGTH(B)) + 
     SUM(DATALENGTH(C)) + 
     SUM(DATALENGTH(D)) + 
     SUM(DATALENGTH(E)) + 
     SUM(DATALENGTH(F)) + 
     SUM(DATALENGTH(G)) + 
     SUM(DATALENGTH(H)) + 
     SUM(DATALENGTH(I))) AS BytesUsed 
FROM Files 

RESULT: 97231108 bytes 

的創建此表的語句是這樣的:

CREATE TABLE [dbo].[Files](
    [A] [int] IDENTITY(33515427,1) NOT NULL, 
    [B] [nvarchar](100) NOT NULL, 
    [C] [nvarchar](max) NOT NULL, 
    [D] [nvarchar](100) NOT NULL, 
    [E] [datetime] NULL, 
    [F] [nvarchar](2) NULL, 
    [G] [datetime] NULL, 
    [H] [nvarchar](100) NULL, 
    [I] [int] NULL, 

    CONSTRAINT [PK_Files] PRIMARY KEY CLUSTERED 
    (
    [A] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], 
    CONSTRAINT [UK_Files_FileType_FileDate] UNIQUE NONCLUSTERED 
    (
    [D] ASC, 
    [E] ASC 
      )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,       
      ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
     ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

    GO 

    ALTER TABLE [dbo].[Files] WITH CHECK ADD CONSTRAINT [FK_Files_FileStatus] FOREIGN 
    KEY([F]) 
    REFERENCES [dbo].[F] ([F]) 
    GO 

    ALTER TABLE [dbo].[Files] CHECK CONSTRAINT [FK_Files_FileStatus] 
    GO 

臨時修復:我已經重新創建表(DROP & CREATE),然後複製舊錶的數據到新的一個,這使桌子從65GB變成了108MB。

我的問題是:

  • 是什麼讓這個表採取這麼大的空間,我怎麼能阻止它再次增長?

回答

0

安裝最新的service pack修復了這個問題。