为了找出我在生产环境中的数据库大小,我只用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]
希望这有帮助
答案 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亿行时压缩。