Index 관련질문입니다. 0 6 819

by 물통20병 [Oracle 기초] index [2017.07.24 16:43:19]


oracle에서 인덱스를 생성 시 인덱스 순서대로 테이블이 정렬되는 것으로 알고 있습니다.

다중 인덱스 테이블에 경우에는 테이블이 어떤 순서로 정렬되는건가요?

각각에 인덱스 값마다 정렬된 값을 유지하는건가요?

 

by jkson [2017.07.24 17:02:26]

잘못 아시고 있는 것 같아요.

인덱스가 컬럼 순서대로 논리적으로 저장이 되는 거구요.

테이블은 특정 인덱스 순서대로 정렬되어 저장되는 것이 아니예요.

(컬럼 순서대로 저장할 수도 있긴합니다 기본적으로는 아니라는 말입니다)

예를 들어서 A, B, C, D,컬럼으로 구성된 테이블 ATABLE이 있고

A, B,로 구성된 인덱스 AINDEX,

B, C, D로 구성된 인덱스 BINDEX가 있다고 하면

사용자가

'2', '강남', 'ABC', 90

'1', '강북', 'DEF', 80

이라는 데이터를 순서대로 저장했다면

테이블은 특정 규칙없이 저장이 됩니다.

인덱스를 사용하지 않고 테이블을 조회할 경우

우연히 2번째 ROW가 먼저 조회될 수도 있고 1번째 ROW가 먼저 조회될 수도 있어요.

테이블에 데이터가 저장될 때

AINDEX에는

'1', '강북'

'2', '강남'

이라는 데이터가 순서대로 저장이 되고

BINDEX에는

'강남', 'ABC', 90

'강북', 'DEF', 80

이라는 데이터가 순서대로 저장이 됩니다.

각 인덱스 ROW에는 테이블에 접근할 수 있는 물리적 ROWID가 있어서

사용자가 인덱스를 사용하여 데이터에 접근할 때는

정렬되어있는 인덱스의 ROWID를 따라 테이블에 접근하므로

빠르게 탐색이 가능한 것이고요.

쉽게 이야기하면 인덱스도 하나의 테이블인데 실제 테이블을 원하는

컬럼만 정렬해서 저장한 테이블이라 생각하시면 좀 쉽습니다.


by 물통20병 [2017.07.24 17:18:00]

아 알겟습니다

테이블에 자료가 많은 경우 인덱스에 데이터를 채우는 것 때문에 시간이 오래걸리는 거군요 반대로 생각하고 있었습니다


by jkson [2017.07.24 17:31:30]

넵 말씀하신 이유로 인덱스가 많아질 수록 DML 성능이 하락됩니다.

또한 인덱스를 이용한 데이터 탐색시

인덱스 찾고 -> 테이블 데이터 찾고 하는 과정이 반복되어야 하므로

조회 대상이 많아지면 이 과정 자체가 테이블 full scan 하는 비용보다

커지게 됩니다.(random access) 이럴 땐 그냥 full scan 하는 게 유리하고요.


by 물통20병 [2017.07.24 17:32:42]

하나 더 질문 드려도 될까요

만약 3개의 열로 이루어진 복합 인덱스인 경우

where 절에 제가 그 중 2개만 태우는 경우 3개를 다 태우는 경우와 비교하여 보면  속도의 차이가 날까요?


by jkson [2017.07.24 17:42:54]

결합인덱스의 경우

인덱스가 어떻게 구성되었냐에 따라 다르겠죠.

A,B,C로 구성된 인덱스에서

선두 컬럼 조건이 누락되었다면 (A)

인덱스를 아예 활용 못할 수도 있고요

선두 컬럼의 값 종류가 적다면 skip scan도 가능하지만

조건이 모두 있는 경우 대부분 더 빠르게 결과가 나오겠죠.

후행 컬럼이 누락된 경우

B가 누락되었다면 마찬가지로 skip scan도 가능하겠지만

역시나 조건이 다 있는 경우보다 느릴 거고

c가 누락되었다면

c의 값이 결정적인 역할을 하지 못하는 경우,

예를 들어 a, b만으로도 데이터가 unique하게 나오거나

a, b만으로도 유의미한 데이터 건수를 구할 수 있을 경우

a, b만 조건으로 사용하더라도 크게 성능차이는 없을 거구요.

대부분은 인덱스 조건 컬럼이 조건으로 모두 나열되었을 경우가

더 빠르게 나오겠네요.


by 물통20병 [2017.07.24 17:54:51]

감사합니다 특별한 경우가 아니라면 다 태우는게 낫겠네요

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입