MSSQL과 ORACLE의 인덱스 크기

HoyaSoft 2019.11.05 09:05 Views : 1093

안녕하세요.

평소 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
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 33859
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 17024
10523 SQLServer에서 프로시저로 결과값 텍스트 파일로 받을시 질문있습니다. [2] 우우후 2019.12.03 951
10522 쿼리 질문. 도와주세요 [1] 릴리_300837 2019.11.28 1076
10521 SQL 관련 에러메세지 시원한라면 2019.11.23 831
10520 DeadLock_Timeout 관련 문의 [1] 황무지 2019.11.21 994
10519 MS SQL 시스템 데이터 베이스 [1] 백업엔지니어 2019.11.15 962
10518 외부에서의 sql접속을 막고 싶은데요 [1] 카루카루 2019.11.14 1055
10517 MSSQL 2008 -> ORACLE 12c Linkedserver 문의 [1] 멋진벼리 2019.11.11 1162
10516 같은 분류별 number 부여 [1] 깨비꼬비 2019.11.08 934
10515 쿼리문의 - 유저 출,입 기록 [1] adsd1234 2019.11.07 1046
» MSSQL과 ORACLE의 인덱스 크기 [2] HoyaSoft 2019.11.05 1093
10513 procedure에서 row lock을 걸려면 어떻게 써줘야하나요? [1] dlrj123 2019.10.30 1108
10512 다국어지원 select 시 N 의사용 [2] pungki21 2019.10.29 1372
10511 left join 쿼리문의 [2] 열린문서 2019.10.25 1354
10510 SQL Managed Instance SQL server2017에 마이그레이션 천정오 2019.10.24 808
10509 프로시저에서 임시테이블을 만들어서 특정테이블의 컬럼을 update하려 합니다. hsp-user 2019.10.18 1248
10508 SQLSERVER 2008 R2 OS 교체 뿌앙뿌앙뿌뿌앙 2019.10.17 995
10507 인덱스 질문 [3] 하이브 2019.10.09 1262
10506 미포함 년도 구할려고 합니다. [1] 아잉옹 2019.10.08 994
10505 트리 구조를 pivot 하고 싶은데 조언좀 해주세요 [1] 노잼호 2019.10.07 1439
10504 sum 합산관련 질문...금손님들 도움이 필요합니다 [1] 동태찜 2019.10.05 963





XE Login