📌 데이터베이스 검색 방식: Seq Scan vs Index Scan 정리

2025. 5. 28. 14:09·기술블로그-Fastapi편
목차
  1. 📌 데이터베이스 검색 방식: Seq Scan vs Index Scan 정리
  2. ✅ 1. Seq Scan (Sequential Scan / Table Scan)
  3. ✅ 2. Index Scan (인덱스 스캔)
  4. ✅ 3. SQL 문법은 동일하다!
  5. 🧠 실행 계획 확인
  6. 📊 비교 요약
  7. 💡 실무 팁

📌 데이터베이스 검색 방식: Seq Scan vs Index Scan 정리

데이터베이스는 쿼리를 실행할 때, 테이블에서 데이터를 어떻게 읽을지 자동으로 결정합니다. 이때 사용되는 대표적인 두 가지 방식이 바로 Sequential Scan(Seq Scan)과 Index Scan입니다.


✅ 1. Seq Scan (Sequential Scan / Table Scan)

🧾 개념

  • 테이블의 모든 행을 처음부터 끝까지 순차적으로 읽는 방식
  • 인덱스를 사용하지 않음

📦 특징

  • 빠르게 설정되고, 간단한 쿼리 계획
  • 작은 테이블이나 인덱스가 없는 컬럼에서 유리
  • 대용량 테이블에서는 느릴 수 있음

📉 예시 상황

SELECT * FROM users WHERE name = 'Alice';

→ name 컬럼에 인덱스가 없다면 → Seq Scan 실행


✅ 2. Index Scan (인덱스 스캔)

🧾 개념

  • 조건에 맞는 값을 찾기 위해 먼저 인덱스를 조회한 후, 해당 위치의 실제 데이터를 테이블에서 읽는 방식
  • B-Tree 등으로 구성된 인덱스를 사용

📦 특징

  • 조건에 부합하는 데이터만 읽으므로 빠름
  • WHERE, JOIN, ORDER BY 조건에 자주 사용됨
  • 디스크 접근이 두 번 일어나므로, 선택도가 낮을 경우에는 오히려 비효율적일 수도 있음

📈 예시 상황

SELECT * FROM users WHERE email = 'test@example.com';

→ email 컬럼에 인덱스가 있다면 → Index Scan 실행


✅ 3. SQL 문법은 동일하다!

  • SELECT, WHERE 등의 쿼리는 동일
  • 인덱스 스캔을 사용하려면 스키마에 인덱스를 미리 선언해두어야 함

📌 PostgreSQL 인덱스 선언

CREATE INDEX idx_users_email ON users(email);

📌 EdgeDB 인덱스 선언 방식 (두 가지)

✅ 방식 1: 속성 내부에서 정의 (단순 필드 인덱스에 적합)

type Movie {
  required title: str {
    index;
  }
}

✅ 방식 2: 타입 내부에서 별도 선언 (복합 또는 표현식 기반 인덱스에 적합)

type Movie {
  title: str;
  multi actors: Person;
  index on (.title);
}

→ 쿼리를 바꾸지 않아도, 인덱스가 존재하면 자동으로 Index Scan 사용


🧠 실행 계획 확인

DB가 어떤 방식으로 데이터를 읽었는지 확인하려면 실행 계획을 보면 됩니다.

PostgreSQL 예시:

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

출력 결과:

  • Seq Scan on users
  • 또는 Index Scan using idx_users_email on users

📊 비교 요약

항목 Seq Scan Index Scan

읽는 방식 테이블 전체 순회 인덱스 → 테이블 포인터
성능 느림 (대용량 시) 빠름 (선택도 높을 때)
인덱스 필요 ❌ 없음 ✅ 필요
사용 조건 인덱스 없음, 소규모 WHERE, JOIN, 정렬에 적합

💡 실무 팁

  • 무조건 인덱스를 많이 만들면 오히려 성능 저하 (쓰기 성능에 영향)
  • 자주 검색되는 조건, JOIN 대상 필드에만 인덱스 적용
  • 쿼리 튜닝 시 EXPLAIN 분석은 필수

📌 Index Scan을 유도하려면? → 쿼리가 아니라 인덱스를 미리 설정해두는 것!
쿼리는 동일하되, 데이터베이스가 내부적으로 최적화 경로를 선택합니다.

'기술블로그-Fastapi편' 카테고리의 다른 글

📌 EdgeQL 반복 삽입 코드 완전 분석  (0) 2025.05.28
📌 데이터베이스 인덱스(Index)와 B-Tree 구조 정리  (0) 2025.05.28
📌 EdgeQL 쿼리 패턴 완전 정복  (0) 2025.05.28
📌 EdgeDB 마이그레이션 꼬임 해결: 전체 초기화 루틴  (0) 2025.05.28
📌 WSL + VS Code 연동 및 'code' 명령어 설정 방법 정리  (0) 2025.05.28
  1. 📌 데이터베이스 검색 방식: Seq Scan vs Index Scan 정리
  2. ✅ 1. Seq Scan (Sequential Scan / Table Scan)
  3. ✅ 2. Index Scan (인덱스 스캔)
  4. ✅ 3. SQL 문법은 동일하다!
  5. 🧠 실행 계획 확인
  6. 📊 비교 요약
  7. 💡 실무 팁
'기술블로그-Fastapi편' 카테고리의 다른 글
  • 📌 EdgeQL 반복 삽입 코드 완전 분석
  • 📌 데이터베이스 인덱스(Index)와 B-Tree 구조 정리
  • 📌 EdgeQL 쿼리 패턴 완전 정복
  • 📌 EdgeDB 마이그레이션 꼬임 해결: 전체 초기화 루틴
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (800) N
      • Python (32)
      • 프로젝트 (118)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    newpoliticalparty
    global politics
    urbantrends
    youngprofessionals
    chatgpterror
    livebroadcast
    RM
    homebartrend
    life reflection
    smartphonedurability
    self-growth
    lawsuitculture
    basalcellcarcinoma
    hotcoffeecase
    btsjungkook
    bts
    college reunions
    americaparty
    classaction
    americanlaw
    chinanightlife
    gpterror
    titaniumcase
    btsdischarge
    btsreunion
    trumpmuskclash
    btscomeback
    뷔
    remittance
    travel ban
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 데이터베이스 검색 방식: Seq Scan vs Index Scan 정리

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.