이제 설계한 테이블과 인덱스, 역정규화가 실제 기능에서 어떻게 동작하는지 EXPLAIN으로 실행 계획을 확인한다.
대표적인 시나리오 몇 가지를 살펴본다.
상황: 사용자가 로그인 화면에서 ID sejong을 입력하고 로그인을 시도한다.
EXPLAIN
SELECT
member_id,
login_id,
password,
member_name
FROM member
WHERE login_id = 'sejong';
실행 계획을 보면 보통 다음과 같은 특징이 나타난다.
table: membertype: const – login_id가 UNIQUE이기 때문에 한 행만 읽으면 된다는 의미다.key: uq_login_id – 우리가 설정한 UNIQUE 인덱스가 정확히 사용된다.rows: 1 – 1건만 읽으면 된다고 예측한다.회원 수가 100만, 1000만 명으로 늘어나도 로그인 성능이 거의 떨어지지 않는 이유가 여기 있다.
상황: 특정 회원의 주문 목록을 최신 순으로 조회한다.
EXPLAIN
SELECT
order_id,
total_amount,
order_status,
ordered_at
FROM orders
WHERE member_id = 1
ORDER BY ordered_at DESC;
idx_orders_member_id 인덱스를 사용해 해당 회원의 주문만 빠르게 찾는다.(member_id, ordered_at) 복합 인덱스를 두어 정렬까지 같이 처리할 수도 있다.상황: 관리자가 특정 기간 동안의 취소 주문만 조회한다.
EXPLAIN
SELECT order_id, member_id, ordered_at, order_status
FROM orders
WHERE order_status = 'CANCELED'
AND ordered_at BETWEEN '2025-09-01 00:00:00'
AND '2025-09-30 23:59:59';
key로 idx_order_status_ordered_at가 사용된다.