데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

MSSQL과 ORACLE의 인덱스 크기

HoyaSoft 2019.11.05 09:05 Views : 929

안녕하세요.

평소 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


테스트 결과 ( 데이터와 인덱스의 크기 )
-- 44바이트(11개컬럼) * 100만행 
select 44 * 1000000 / 1024. / 1024. -- MB용량변환

-- 예상크기
데이터 : 42MB
인덱스 : 38MB

-- 실제크기
데이터 : 52MB
인덱스 : 0.6MB

-- 인덱스 삭제후 사이즈 비교
데이터 : 52MB
인덱스 : 0MB

-- 인덱스 재생성후 사이즈 비교
데이터 : 54MB
인덱스 : 0.3MB

--> 4바이트 짜리 컬럼 11개로 이루어진 행이 100만건이 입력되는것을 테스트 하였습니다.
여기서... MSSQL 클러스터 인덱스의 실제 크기가 왜이렇게 작은건지.. 궁금합니다.

--> 오라클의 경우 테스트 예상대로의 사이즈로 데이터와 인덱스가 생성되었습니다.
No. Subject Author Date Views
10517 MSSQL 2008 -> ORACLE 12c Linkedserver 문의 [1] 멋진벼리 2019.11.11 1049
10516 같은 분류별 number 부여 [1] 깨비꼬비 2019.11.08 858
10515 쿼리문의 - 유저 출,입 기록 [1] adsd1234 2019.11.07 947
» MSSQL과 ORACLE의 인덱스 크기 [2] HoyaSoft 2019.11.05 929
10513 procedure에서 row lock을 걸려면 어떻게 써줘야하나요? [1] dlrj123 2019.10.30 991
10512 다국어지원 select 시 N 의사용 [2] pungki21 2019.10.29 1115
10511 left join 쿼리문의 [2] 열린문서 2019.10.25 1259
10510 SQL Managed Instance SQL server2017에 마이그레이션 천정오 2019.10.24 737
10509 프로시저에서 임시테이블을 만들어서 특정테이블의 컬럼을 update하려 합니다. hsp-user 2019.10.18 1170
10508 SQLSERVER 2008 R2 OS 교체 뿌앙뿌앙뿌뿌앙 2019.10.17 929
10507 인덱스 질문 [3] 하이브 2019.10.09 1168
10506 미포함 년도 구할려고 합니다. [1] 아잉옹 2019.10.08 922
10505 트리 구조를 pivot 하고 싶은데 조언좀 해주세요 [1] 노잼호 2019.10.07 1315
10504 sum 합산관련 질문...금손님들 도움이 필요합니다 [1] 동태찜 2019.10.05 887
10503 구간별 최고,최저 쿼리 질문입니다. [1] 생각찾기 2019.10.04 1001
10502 [MYSQL] 결제 실패한 고객의 월별 재구매율 구하기 [2] 알프 2019.10.02 1102
10501 SQL Server 2008 R2 접속시 로그인 시간 제한이 만료 오류 관련 문의 드립니다. [1] 훈미남 2019.09.27 1064
10500 data 삭제시 속도 향샹될까요 [2] 포스김 2019.09.27 930
10499 MSSQL Collation에러 [1] 일인일닭 2019.09.26 1070
10498 2008 에서 2017 업그레이드 시 손들어금내놔 2019.09.24 779





XE Login