Sql Server是否在类似数据上压缩数据库大小

时间:2010-02-19 20:02:43

标签: sql-server sql-server-2005 sql-server-2008-express

为了找出我在生产环境中的数据库大小,我只用150万行几乎相同的数据填充了我的表(主键除外)。它目前显示261 MB ...

现在,我是否可以依赖于此,或者由于数据在所有其他列上几乎相似,因此SQL服务器已经压缩了大小。即。如果每行中的值不同,大小会不同......

此外..甚至列的空值是否会影响数据库的大小?

感谢您的时间......

编辑:这是我的架构......我也制作了一些索引......

    CREATE TABLE [dbo].[Trn_Tickets](
        [ObjectID] [bigint] IDENTITY(1,1) NOT NULL,
        [TicketSeqNo] [bigint] NULL,
        [BookSeqNo] [bigint] NULL,
        [MatchID] [int] NULL,
        [TicketNumber] [varchar](20) NULL,
        [BarCodeNumber] [varchar](20) NULL,
        [GateNo] [varchar](5) NULL,
        [EntryFrom] [varchar](10) NULL,
        [MRP] [decimal](9, 2) NULL,
        [Commission] [decimal](9, 2) NULL,
        [Discount] [decimal](9, 2) NULL,
        [CashPrice] [decimal](9, 2) NULL,
        [CashReceived] [decimal](9, 2) NULL,
        [BalanceDue] [decimal](9, 2) NULL,
        [CollectibleFrom] [char](1) NULL,
        [PlaceOfIssue] [varchar](20) NULL,
        [DateOfIssue] [datetime] NULL,
        [PlaceOfSale] [varchar](20) NULL,
        [AgentID] [int] NULL,
        [BuyerID] [int] NULL,
        [SaleTypeID] [tinyint] NULL,
        [SaleDate] [smalldatetime] NULL,
        [ApprovedBy] [varchar](15) NULL,
        [ApprovedDate] [smalldatetime] NULL,
        [InvoiceStatus] [char](1) NULL,
        [InvoiceRefNo] [varchar](15) NULL,
        [InvoiceDate] [smalldatetime] NULL,
        [BookPosition] [char](2) NULL,
        [TicketStatus] [char](2) NULL,
        [RecordStatus] [char](1) NULL,
        [ClosingStatus] [char](2) NULL,
        [ClosingDate] [datetime] NULL,
        [UpdatedDate] [datetime] NULL,
        [UpdatedUser] [varchar](10) NULL,
     CONSTRAINT [PK_Trn_Tickets] PRIMARY KEY CLUSTERED 
    (
        [ObjectID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

希望这有帮助

2 个答案:

答案 0 :(得分:3)

SQL Server 2005和2008 Express不会压缩您的数据。 SQL Server 2008可以使用page compression,但仅限于Enterprise Edition。 NULL列占用行中的一位。

从您的数据描述中,听起来更像是普通规范化的问题。将重复值分隔为查找表,仅存储不同的组合,将查找表连接起来。这将通过架构设计保存数据,并适用于所有数据库平台,所有版本,所有SKU。

答案 1 :(得分:1)

将ApprovedBy etc(varchar)替换为查找其他表

你需要约会时间吗?

您期望超过40亿行吗?为什么前3个cols bigint?

在这里保存几个字节=那里有很大的不同。页面密度更高(例如,每8k页面更多行)=更少的空间+更小的索引。

当你有15亿行时压缩。