File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ # 인덱스 구조 변경(단일→복합)에 따른 쿼리 비용 개선 분석
2+
3+ ## 1. 개요 및 테스트 환경
4+
5+ 이커머스 서비스의 핵심 기능인 ** '특정 브랜드의 인기 상품 조회'** API의 성능을 개선하기 위해 인덱스 설계를 진행하고 성능 변화를 측정했습니다.
6+
7+ ### 1.1 테스트 데이터 규모
8+
9+ - ** Total Rows:** 100,000건 (Product 테이블)
10+ - ** Brands:** 30개 (균등 분포 가정)
11+ - ** DBMS:** MySQL 8.0 (InnoDB)
12+
13+ ### 1.2 테스트 대상 쿼리
14+
15+ SQL
16+
17+ `SELECT *
18+ FROM product
19+ WHERE brand_id = 5
20+ ORDER BY like_count DESC
21+ LIMIT 20;`
22+
23+ ---
24+
25+ ## 2. 인덱스 적용 시나리오 비교
26+
27+ 성능 측정은 ** 1) 인덱스 없음** , ** 2) 단일 인덱스 적용** , ** 3) 복합 인덱스 적용** 세 가지 케이스로 나누어 진행했습니다.
28+
29+ | ** 케이스** | ** 적용 인덱스 (Key)** | ** 구성 컬럼** |
30+ | --- | --- | --- |
31+ | ** Case 1** | (None) | 없음 (PK만 존재) |
32+ | ** Case 2** | ` idx_product_brand ` | ` (brand_id) ` |
33+ | ** Case 3** | ` idx_product_brand_like ` | ` (brand_id, like_count DESC) ` |
34+
35+ ---
36+
37+ ## 3. 성능 측정 결과 (EXPLAIN ANALYZE)
38+
39+ 각 시나리오별 실행 계획 및 소요 시간을 요약한 결과표입니다.
40+
41+ | ** 구분** | ** 인덱스명** | ** 실행 시간 (Actual Time)** | ** 비용 (Cost)** | ** 스캔 방식 (Type/Extra)** | ** 비고** |
42+ | --- | --- | --- | --- | --- | --- |
43+ | ** 개선 전** | - | ** 56.3 ms** | 10,131 | ` ALL ` (Full Table Scan) | 전체 데이터 스캔 및 정렬 발생 |
44+ | ** 개선 후** | ` idx_product_brand ` | ** 10.8 ms** (▼ 80%) | 927 | ` ref ` (Using filesort) | ** Best Performance** |
45+ | ** 비교군** | ` idx_product_brand_like ` | 180.0 ms | 2,729 | ` ref ` (Index Lookup) | 정렬은 생략했으나 랜덤 I/O 비용 발생 |
46+
You can’t perform that action at this time.
0 commit comments