
문제
다음 sample_table 테이블이 있다.
CREATE TABLE sample_table (
id BIGINT PRIMARY KEY,
a INT,
b INT,
data VARCHAR(100)
);
CREATE INDEX idx_a_b ON sample_table (a, b);
다음 쿼리에서 쿼리 실행계획에 대해 알맞은 것을 고르시오.
SELECT COUNT(*) FROM sample_table;
선지
A) 테이블 풀 스캔 : 데이터 테이블에 직접 접근하여 모든 행 탐색
B) 인덱스 풀 스캔 : 인덱스 테이블에 접근하여 모든 행 탐색
C) 인덱스 레인지 스캔 : 인덱스 테이블에 접근하여 특정 범위 탐색
D) 루스 인덱스 스캔 : 인덱스 테이블을 띄엄띄엄 건너뛰며 탐색
정답
더보기
A) 테이블 풀 스캔 : 데이터 테이블에 직접 접근하여 모든 행 탐색
B) 인덱스 풀 스캔 : 인덱스 테이블에 접근하여 모든 행 탐색
C) 인덱스 레인지 스캔 : 인덱스 테이블에 접근하여 특정 범위 탐색
D) 루스 인덱스 스캔 : 인덱스 테이블을 띄엄띄엄 건너뛰며 탐색
핵심 해설
옵티마이저는 더 빠르고 디스크 부담을 주지 않는 인덱스 테이블을 통한 쿼리 실행이 훨씬 효율적이라고 판단합니다.
주어진 쿼리는 테이블 행의 개수는 묻는 것이므로 테이블 풀스캔보다 비용이 훨씬 저렴한 풀 스캔을 통해 count(*) 쿼리를 실행합니다.
실제 실행계획을 확인해보아도 idx_a_b를 활용한 인덱스 풀 스캔(Using index)가 나오는 것을 확인할 수 있습니다.
+--+-----------+------------+----------+-----+-------------+-------+-------+----+----+--------+-----------+
|id|select_type|table |partitions|type |possible_keys|key |key_len|ref |rows|filtered|Extra |
+--+-----------+------------+----------+-----+-------------+-------+-------+----+----+--------+-----------+
|1 |SIMPLE |sample_table|null |index|null |idx_a_b|10 |null|5 |100 |Using index|
+--+-----------+------------+----------+-----+-------------+-------+-------+----+----+--------+-----------+'인덱스 퀴즈 해설' 카테고리의 다른 글
| [41번] 인덱스 스킵 스캔(1) (0) | 2025.12.05 |
|---|---|
| [40번] Unique Index Null 중복 허용 (0) | 2025.12.05 |
| [38번] 커버링 인덱스 (3) (0) | 2025.12.05 |
| [37번] 커버링 인덱스 (2) (0) | 2025.12.05 |
| [36번] 커버링 인덱스 (1) (0) | 2025.12.05 |