[데이터베이스] 인덱스(Index)

2023. 7. 18. 11:38·CS 지식/[데이터베이스]

DB Index

  1. 목적 : RDBMS에서 검색 속도를 높이기 위한 기술
    • Table의 Column을 색인화 함 (따로 파일로 저장) → 해당 Table의 Record를 Full scan 하지 않음 → 색인화 된 (B+ Tree 구조로) Index 파일 검색으로 검색 속도 향상
  2. 과정 : Table을 생성하면, MYD, MYI, FRM 3개의 파일이 생성됨
    • FRM : 테이블 구조가 저장되어 있는 파일
    • MYD : 실제 데이터가 있는 파일
    • MYI : Index 정보가 들어가 있는 파일
    • → Index를 사용하지 않는 경우, MYI 파일은 비어져 있음
      그러나, 인덱싱하는 경우 MYI 파일이 생성됨
      이후에 사용자가 Select 쿼리로 Index를 사용하는 Column을 탐색 시, MYI 파일의 내용을 검색함
  3. 단점
    • Index 생성시, .mdb 파일 크기가 증가함
    • 한 페이지를 동시에 수정할 수 있는 병행성이 줄어듬
    • 인덱스 된 Field에서 Data를 업데이트하거나, Record를 추가 또는 삭제시 성능이 떨어짐
    • 데이터 변경 작업이 자주 일어나는 경우, Index를 재작성해야 하므로, 성능에 영향을 미침
  4. 상황 분석
    • 사용하면 좋은 경우
      (1) Where 절에서 자주 사용되는 Column
      (2) 외래키가 사용되는 Column
      (3) Join에 자주 사용되는 Column
    • Index 사용을 피해야 하는 경우
      (1) Data 중복도가 높은 Column
      (2) DML이 자주 일어나는 Column
  5. DML이 일어났을 때의 상황
    • INSERT
      기존 Block에 여유가 없을 때, 새로운 Data가 입력됨
      → 새로운 Block을 할당 받은 후, Key를 옮기는 작업을 수행 (많은 양의 Redo가 기록되고, 유발)
      → Index split 작업 동안, 해당 Block의 Key 값에 대해서 DML이 블로킹 됨 → 대기 이벤트 발생

    • DELETE
      [Table과 Index 상황 비교]
      Table에서 data가 delete 되는 경우 : Data가 지워지고, 다른 Data가 그 공간을 사용 가능
      Index에서 Data가 delete 되는 경우 : Data가 지워지지 않고, 사용 안 됨 표시만 해둠
      → Table의 Data 수와 Index의 Data 수가 다를 수 있음

    • UPDATE
      Table에서 update가 발생하면 -> Index는 Update 할 수 없음
      Index에서는 Delete가 발생한 후, 새로운 작업의 Insert 작업 / 2배의 작업이 소요되어, 힘듦
저작자표시 비영리 변경금지 (새창열림)

'CS 지식 > [데이터베이스]' 카테고리의 다른 글

[데이터베이스] 트랜잭션(Transaction)  (0) 2023.07.18
[데이터베이스] 정규화(Normalization)  (0) 2023.07.18
[데이터베이스] 이상(Anomaly)  (0) 2023.07.18
[데이터베이스] SQL과 NOSQL의 차이  (0) 2023.07.18
[데이터베이스] SQL Injection  (0) 2023.07.18
'CS 지식/[데이터베이스]' 카테고리의 다른 글
  • [데이터베이스] 트랜잭션(Transaction)
  • [데이터베이스] 정규화(Normalization)
  • [데이터베이스] 이상(Anomaly)
  • [데이터베이스] SQL과 NOSQL의 차이
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    CS
    programmers
    springboot
    Flutter
    Oracle
    Spring Security
    리눅스
    JPA
    플러터
    baekjoon
    데이터
    backjoon
    시큐리티
    DB
    spring
    데이터베이스
    스프링부트
    프로그래머스
    Linux
    스프링
    pcce 기출문제
    자바
    스프링 부트 쇼핑몰 프로젝트 with JPA
    CS지식
    postgresql
    리눅스마스터 1급
    python
    리눅스마스터
    백준
    Java
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[데이터베이스] 인덱스(Index)
상단으로

티스토리툴바