2010-02-19 3 views
0

프로덕션 환경에서 DB 크기가된다는 것을 알기 만하면 거의 동일한 데이터 (기본 키 제외)가있는 150 만 개의 행이 테이블에 채워졌습니다. 그것은 현재 261MB를 보여줍니다 ...Sql Server Compress 비슷한 데이터의 데이터베이스 크기

지금, 내가 이것을 의지 할 수 있는지 또는 데이터가 다른 모든 열과 거의 비슷하기 때문에 SQL 서버는 크기를 압축했습니다. 즉. 각 행의 값이 다른 경우 크기가 달라집니다 ...

기타 ... 짝수 열도 null 값이 DB 크기에 영향을 줍니까? 시간에 대한

감사합니다 ...

편집 : 여기 내 스키마입니다 ... 그리고 나도 어떤 인덱스를 만들었습니다 ...

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

이것은 refator 문제처럼 보일 수 있습니다. 당신은 OG ** NULL ** 컬럼을 많이 가지고 있다면 테이블을 리팩터링 할 수 있습니까? –

답변

3

SQL Server를하는 데 도움이 2005 및 2008 Express는 귀하의 데이터를 압축하지 않습니다. SQL Server 2008은 page compression을 사용할 수 있지만 Enterprise Edition에서만 사용할 수 있습니다. NULL 열은 행의 1 비트를 차지합니다.

데이터의 설명에서 일반 정규화 문제와 유사합니다. 반복 값을 조회 테이블로 분리하고 고유 한 조합 만 저장하고 조회 테이블을 agaisnt에 참여시킵니다. 이렇게하면 스키마 디자인으로 데이터를 저장하고 모든 DB 플랫폼, 모든 버전 및 모든 SKU에서 작동합니다.

1

는 다른 테이블

당신이 날짜가 필요하십니까

에 조회와 ApprovedBy 등 (VARCHAR)를 교체?

40 억 개가 넘는 행을 기대합니까? 왜 첫 번째 3 cols bigint입니까?

몇 바이트를 여기 저기 저장하면 큰 차이가 있습니다. 더 높은 페이지 밀도 (예 : 8k 페이지 당 더 많은 행) = 더 적은 공간 + 더 작은 인덱스.

15 억 개의 행이있을 때 압축하십시오.