Skip to content

Latest commit

 

History

History
54 lines (34 loc) · 3.56 KB

File metadata and controls

54 lines (34 loc) · 3.56 KB

DB 인덱싱(Indexing) vs. 풀 스캔(Full Scan) 성능 비교 요약

이 문서는 URL 원본 주소를 찾는 DB 조회 과정에서 **인덱싱(Indexing)**과 풀 스캔(Full Scan) 방식의 성능을 비교 분석하기 위해 수행된 테스트의 요약 결과입니다.

🟢 가설

"대용량 데이터 환경에서 특정 URL을 조회할 때, B-Tree 인덱스를 활용하는 것이 테이블 전체를 순차적으로 탐색하는 풀 스캔 방식보다 응답 시간과 처리량(Throughput) 측면에서 월등히 우수한 성능을 보일 것이다."

🟢 테스트 환경 및 설정

항목 내용
테스트 목표 동일한 부하 조건에서 DB 인덱싱과 풀 스캔 방식의 응답 시간, 성공률, 처리량을 비교하여 가설 검증
테스트 도구 k6 (constant-arrival-rate executor 사용)
테스트 대상 100만 건의 URL 데이터가 저장된 MySQL 데이터베이스
핵심 변수 DB 조회 방식 (인덱스 검색 vs. 풀 스캔)
테스트 부하 시나리오: 100 TPS (초당 100건 요청)
성공 기준 p95 응답 시간 200ms 미만 및 성공률 98% 이상

🟢 상세 리포트


🟢 실제 테스트 결과 및 분석 (100 TPS)

시나리오: 100 TPS 부하 비교 - 가설 검증 (PASS)

이 시나리오에서는 인덱싱 방식이 풀 스캔 대비 모든 지표에서 압도적인 성능을 보이며 가설을 완벽하게 입증했습니다. 풀 스캔 방식은 사실상 시스템이 마비되는 결과를 보였습니다.

지표 풀 스캔 (Full Scan) 인덱싱 (Indexing) 결과 분석
성공률 (Success Rate) 0.09% 100.00% 인덱싱은 모든 요청을 성공시켰으나, 풀 스캔은 거의 모든 요청에 실패했습니다.
p95 응답 시간 1.93초 5.81ms 인덱싱이 약 332배 빠른 응답 속도를 기록했습니다.
평균 응답 시간 1.19초 3.39ms 평균 응답 시간 역시 인덱싱이 압도적으로 우수했습니다.

분석:

  • 풀 스캔 (Time Complexity: O(N)): 100만 건의 데이터를 처음부터 끝까지 순차적으로 모두 비교하여 요청된 URL을 찾습니다. 데이터가 많을수록 탐색 시간이 정비례하여 증가하므로, 100 TPS의 부하가 몰리자 DB는 단 하나의 요청도 제시간에 처리하지 못하고 병목 상태에 빠졌습니다.
  • 인덱싱 (Time Complexity: O(log N)): Primary Key에 적용된 B-Tree 인덱스를 통해 단 몇 번의 탐색만으로 원하는 데이터를 즉시 찾아냅니다. 이로 인해 데이터가 100만 건에 달하더라도 매우 빠르고 일관된 응답 속도를 유지할 수 있었고, 100 TPS 부하를 안정적으로 처리했습니다.

이 결과는 데이터베이스 성능 최적화에서 인덱스의 중요성을 명확히 보여줍니다.


최종 결론

  1. 가설 검증 성공: 100 TPS 부하 환경에서 인덱싱은 풀 스캔 방식보다 월등히 높은 성공률과 비교할 수 없을 정도로 빠른 응답 속도를 보여주며, 대용량 데이터 조회에 필수적인 기술임을 입증했습니다.

  2. 풀 스캔의 한계 명확: 풀 스캔 방식은 50 TPS 부하 처리에 성공했으나, 100 TPS에서는 완전히 사용 불가능한 수준의 성능 저하를 보였습니다.