인덱스 퀴즈 해설

[39번] count(*) 풀 인덱스 스캔

index-quiz 2025. 12. 5. 15:01

#39

문제

다음 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