인덱스 퀴즈 해설

[45번] 인덱스 정렬 (3)

index-quiz 2025. 12. 12. 01:04

#45

문제

다음 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),
);

CREATE INDEX ix_firstname ON employees (first_name ASC);

 

다음 쿼리는 ix_firstname 인덱스를 스캔할 까?

SELECT * FROM employees ORDER BY emp_no DESC LIMIT 4;

 

선지

 

A) 활용한다

B) 활용하지 않는다

 

정답

더보기

A) 활용한다

B) 활용하지 않는다

 

핵심 해설

 

정렬 조건이 주어진다고 인덱스를 무조건 활용하는 것은 아닙니다. 옵티마이저는 인덱스 테이블을 통한 정렬 탐색의 쿼리비용이 훨씬 저렴할 때에만 인덱스 테이블의 정렬 성질을 활용합니다.

 

위의 쿼리는 PK인 emp_no를 기준으로 정렬하였으므로 ix_firstname의 정렬 기준인 first_name의 정렬 성질을 활용하지 못합니다.

따라서 클러스터링 인덱스인 emp_no를 기준으로 역순 스캔이 발생하지, ix_firstname을 활용하지는 않습니다.

+--+-----------+---------+----------+-----+-------------+-------+-------+----+----+--------+-------------------+
|id|select_type|table    |partitions|type |possible_keys|key    |key_len|ref |rows|filtered|Extra              |
+--+-----------+---------+----------+-----+-------------+-------+-------+----+----+--------+-------------------+
|1 |SIMPLE     |employees|null      |index|null         |PRIMARY|4      |null|4   |100     |Backward index scan|
+--+-----------+---------+----------+-----+-------------+-------+-------+----+----+--------+-------------------+

실제로도 활용한 키 : PRIMARY, Extra: Backward index scan으로 PK를 활용한 역순 스캔이 발생하였음으로 알 수 있습니다.