잘못 아시고 있는 것 같아요.
인덱스가 컬럼 순서대로 논리적으로 저장이 되는 거구요.
테이블은 특정 인덱스 순서대로 정렬되어 저장되는 것이 아니예요.
(컬럼 순서대로 저장할 수도 있긴합니다 기본적으로는 아니라는 말입니다)
예를 들어서 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를 따라 테이블에 접근하므로
빠르게 탐색이 가능한 것이고요.
쉽게 이야기하면 인덱스도 하나의 테이블인데 실제 테이블을 원하는
컬럼만 정렬해서 저장한 테이블이라 생각하시면 좀 쉽습니다.
결합인덱스의 경우
인덱스가 어떻게 구성되었냐에 따라 다르겠죠.
A,B,C로 구성된 인덱스에서
선두 컬럼 조건이 누락되었다면 (A)
인덱스를 아예 활용 못할 수도 있고요
선두 컬럼의 값 종류가 적다면 skip scan도 가능하지만
조건이 모두 있는 경우 대부분 더 빠르게 결과가 나오겠죠.
후행 컬럼이 누락된 경우
B가 누락되었다면 마찬가지로 skip scan도 가능하겠지만
역시나 조건이 다 있는 경우보다 느릴 거고
c가 누락되었다면
c의 값이 결정적인 역할을 하지 못하는 경우,
예를 들어 a, b만으로도 데이터가 unique하게 나오거나
a, b만으로도 유의미한 데이터 건수를 구할 수 있을 경우
a, b만 조건으로 사용하더라도 크게 성능차이는 없을 거구요.
대부분은 인덱스 조건 컬럼이 조건으로 모두 나열되었을 경우가
더 빠르게 나오겠네요.