
문제
다음과 같은 employees 테이블이 있다.
CREATE TABLE employees (
emp_no INT NOT NULL,
birth_date DATE NOT NULL,
first_name VARCHAR(14) NOT NULL,
last_name VARCHAR(16) NOT NULL,
gender ENUM('M','F') NOT NULL,
hire_date DATE NOT NULL,
PRIMARY KEY (emp_no),
);
mysql> CREATE INDEX ix_firstname ON employees (first_name ASC);
다음 쿼리는 ix_firstname 인덱스를 활용하는가?
SELECT * FROM employees ORDER BY first_name ASC LIMIT 4;
선지
A) 활용한다
B) 활용하지 않는다
정답
더보기
A) 활용한다
B) 활용하지 않는다
핵심 해설
ix_firstname 인덱스는 이미 오름차순으로 정렬되어 있는 firstname 컬럼 사본입니다.
따라서, 테이블을 별도로 정렬할 필요없이 인덱스 테이블에 접근하는 것의 쿼리비용이 훨씬 저렴합니다.
상세 해설
인덱스와 정렬 쿼리
B-Tree 인덱스는 기본적으로 정렬된 구조입니다. 특히 InnoDB의 일반 인덱스는 값들이 오름차순으로 정렬된 형태로 저장됩니다.
그렇기에 정렬쿼리에 있어 인덱스 테이블을 활용한 결과반환은 훨씬 효율적입니다.

위의 사례에서도 ORDER BY firstname ASC 라는 정렬 요구사항에 있어 이미 ix_firstname 인덱스는 fisrt_name 컬럼을 기준으로 오름차순 정렬된 인덱스 테이블을 가지고 있습니다. 따라서 인덱스를 그대로 읽기만 해도 이미 정렬된 데이터를 순서대로 가져올 수 있습니다.
실습으로 확인하기
+--+-----------+---------+----------+-----+-------------+------------+-------+----+----+--------+-----+
|id|select_type|table |partitions|type |possible_keys|key |key_len|ref |rows|filtered|Extra|
+--+-----------+---------+----------+-----+-------------+------------+-------+----+----+--------+-----+
|1 |SIMPLE |employees|null |index|null |ix_firstname|58 |null|4 |100 |null |
+--+-----------+---------+----------+-----+-------------+------------+-------+----+----+--------+-----+
쿼리 실행계획을 보아도 key: ix_firstname, type: index로 ix_firstname 인덱스를 활용하여 데이터를 조회한 모습을 볼 수 있습니다.
여기서 type: index는 인덱스 테이블을 순차적으로 오름차순으로 4개만 읽었다는 것을 의미합니다.
'인덱스 퀴즈 해설' 카테고리의 다른 글
| [45번] 인덱스 정렬 (3) (0) | 2025.12.12 |
|---|---|
| [44번] 인덱스 정렬 (2) (0) | 2025.12.12 |
| [42번] 인덱스 스킵 스캔(2) (0) | 2025.12.05 |
| [41번] 인덱스 스킵 스캔(1) (0) | 2025.12.05 |
| [40번] Unique Index Null 중복 허용 (0) | 2025.12.05 |