MSSQL과 ORACLE의 인덱스 크기

HoyaSoft 2019.11.05 09:05 Views : 1332

안녕하세요.

평소 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 480285
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 341422
10523 쿼리 질문입니다 집계함수 관련 .. [1] 초코송이 2019.12.04 1084
10522 SQLServer에서 프로시저로 결과값 텍스트 파일로 받을시 질문있습니다. [2] 우우후 2019.12.03 1161
10521 쿼리 질문. 도와주세요 [1] 릴리_300837 2019.11.28 1275
10520 SQL 관련 에러메세지 시원한라면 2019.11.23 999
10519 DeadLock_Timeout 관련 문의 [1] 황무지 2019.11.21 1171
10518 MS SQL 시스템 데이터 베이스 [1] 백업엔지니어 2019.11.15 1143
10517 외부에서의 sql접속을 막고 싶은데요 [1] 카루카루 2019.11.14 1217
10516 MSSQL 2008 -> ORACLE 12c Linkedserver 문의 [1] 멋진벼리 2019.11.11 1327
10515 같은 분류별 number 부여 [1] 깨비꼬비 2019.11.08 1116
10514 쿼리문의 - 유저 출,입 기록 [1] adsd1234 2019.11.07 1249
» MSSQL과 ORACLE의 인덱스 크기 [2] HoyaSoft 2019.11.05 1332
10512 procedure에서 row lock을 걸려면 어떻게 써줘야하나요? [1] dlrj123 2019.10.30 1294
10511 다국어지원 select 시 N 의사용 [2] pungki21 2019.10.29 1565
10510 left join 쿼리문의 [2] 열린문서 2019.10.25 1512
10509 SQL Managed Instance SQL server2017에 마이그레이션 천정오 2019.10.24 1010
10508 프로시저에서 임시테이블을 만들어서 특정테이블의 컬럼을 update하려 합니다. hsp-user 2019.10.18 1489
10507 SQLSERVER 2008 R2 OS 교체 뿌앙뿌앙뿌뿌앙 2019.10.17 1166
10506 인덱스 질문 [3] 하이브 2019.10.09 1462
10505 미포함 년도 구할려고 합니다. [1] 아잉옹 2019.10.08 1208
10504 트리 구조를 pivot 하고 싶은데 조언좀 해주세요 [1] 노잼호 2019.10.07 1668





XE Login