안녕하세요.
평소 MSSQL만 사용하다가 ORACLE을 같이 다루게 되었는데요.
동일한 데이터를 양측 DBMS에 적재하는데 오라클의 용량이 두배정보 크게 저장되어서 궁금증이 생겨서 질문 드립니다.
질문요약
1. MSSQL 클러스터 인덱스의 용량은 왜이렇게 작은가?
2. 오라클의 인덱스 크기를 MSSQL 클러스터 인덱스처럼 줄일수 있는 방법은 없는가?
테스트 내용 ( DBMS : SQL Server 2014 (14.0.1) )
1. INT 4바이트 컬럼 11개를 가지고 키컬럼이 10개인 테이블 생성
CREATE TABLE [dbo].[INDEX_SIZE_TEST](
[KEY1] int NOT NULL,
[KEY2] int NOT NULL,
[KEY3] int NOT NULL,
[KEY4] int NOT NULL,
[KEY5] int NOT NULL,
[KEY6] int NOT NULL,
[KEY7] int NOT NULL,
[KEY8] int NOT NULL,
[KEY9] int NOT NULL,
[KEY10] int NOT NULL,
[VAL] int NULL
CONSTRAINT [PK_INDEX_SIZE_TEST] PRIMARY KEY CLUSTERED
(
[KEY1] ASC,
[KEY2] ASC,
[KEY3] ASC,
[KEY4] ASC,
[KEY5] ASC,
[KEY6] ASC,
[KEY7] ASC,
[KEY8] ASC,
[KEY9] ASC,
[KEY10] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DATA]
) ON [DATA]
GO
2. 100만건의 테이스 데이터 입력
DECLARE @SEQ INT
SET @SEQ = 1
WHILE @SEQ <= 1000000
BEGIN
PRINT @SEQ
-- 작업 입력--
INSERT INTO [INDEX_SIZE_TEST](KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY10, VAL)
SELECT @SEQ, @SEQ, @SEQ, @SEQ, @SEQ, @SEQ, @SEQ, @SEQ, @SEQ, @SEQ, @SEQ
--------------
SET @SEQ = @SEQ + 1
END
별도로 인덱스가 생성되는게 아닙니다.
데이터가 재정렬되어 저장되지요.
테이블에 1개만 생성이 가능합니다.