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

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

MSSQL과 ORACLE의 인덱스 크기

HoyaSoft 2019.11.05 09:05 Views : 922

안녕하세요.

평소 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
10528 초보가 sql 2008 에서 한글 질문드립니다. [1] 민상리 2019.12.14 810
10527 바인드 변수 조회할 수 있나요?? [1] 세기말텐션 2019.12.13 926
10526 조인하여 가장 많은 값의 수를 도출하는 쿼리 질문있습니다! [2] SULLU 2019.12.08 898
10525 문자열 특정 자릿수마다 문자넣기 [2] 안돼요 2019.12.05 882
10524 쿼리 질문입니다 집계함수 관련 .. [1] 초코송이 2019.12.04 804
10523 SQLServer에서 프로시저로 결과값 텍스트 파일로 받을시 질문있습니다. [2] 우우후 2019.12.03 828
10522 쿼리 질문. 도와주세요 [1] 릴리_300837 2019.11.28 962
10521 SQL 관련 에러메세지 시원한라면 2019.11.23 762
10520 DeadLock_Timeout 관련 문의 [1] 황무지 2019.11.21 814
10519 MS SQL 시스템 데이터 베이스 [1] 백업엔지니어 2019.11.15 874
10518 외부에서의 sql접속을 막고 싶은데요 [1] 카루카루 2019.11.14 973
10517 MSSQL 2008 -> ORACLE 12c Linkedserver 문의 [1] 멋진벼리 2019.11.11 1024
10516 같은 분류별 number 부여 [1] 깨비꼬비 2019.11.08 850
10515 쿼리문의 - 유저 출,입 기록 [1] adsd1234 2019.11.07 946
» MSSQL과 ORACLE의 인덱스 크기 [2] HoyaSoft 2019.11.05 922
10513 procedure에서 row lock을 걸려면 어떻게 써줘야하나요? [1] dlrj123 2019.10.30 978
10512 다국어지원 select 시 N 의사용 [2] pungki21 2019.10.29 1092
10511 left join 쿼리문의 [2] 열린문서 2019.10.25 1256
10510 SQL Managed Instance SQL server2017에 마이그레이션 천정오 2019.10.24 737
10509 프로시저에서 임시테이블을 만들어서 특정테이블의 컬럼을 update하려 합니다. hsp-user 2019.10.18 1167





XE Login