CS전공지식- 4.5 인덱스

KIM HYUNMIN·2024년 10월 23일

CS 기초지식

목록 보기
11/13

1) 인덱스의 필요성
2) B-트리
3) 인덱스 만드는 방법
4) 인덱스 최적화기법

인덱스란?

  • 인덱스는 데이터를 빠르게 찾을 수 있는 하나의 장치입니다. 책의 목차처럼 작동하여, 원하는 데이터를 빠르게 찾을 수 있도록 도와줍니다. 인덱스가 없는 경우 데이터베이스는 테이블의 모든 데이터를 일일이 확인하는 풀 테이블 스캔을 해야 하지만, 인덱스를 사용하면 필요한 데이터로 바로 접근할 수 있다.

B-트리 구조란

B-트리는 데이터베이스와 파일 시스템에서 자주 사용되는 균형 잡힌 트리 자료 구조로, 대량의 데이터를 효율적으로 관리하고 검색,삽입,삭제 연산을 빠르게 수행할 수 있도록 설계되었다.

B트리는 최상위에 단 하나의 노드 만이 존재하는데, 이를 루트 노드라고 하고 중간노드를 브랜치 노드 최하위 노드를 리프 노드라고 한다.

B트리의 특징

  • 균형 유지
  • 다수의 자식 노드
  • 정렬된 노드
  • 노드 분할 및 병합

인덱스의 대수확장성
대수 확장성이란 데이터 양이 커지더라도 성능 저하가 비교적 완만하게 이루어지는 것을 의미합니다. 예를 들어, B-트리 기반의 인덱스는 O(log n)의 시간 복잡도를 가지기 때문에 데이터가 2배, 10배, 100배로 커지더라도 성능이 선형적으로 감소하지 않고, 로그 형태로 증가합니다. 즉, 데이터가 매우 커져도 일정 수준의 성능을 유지할 수 있는 확장성을 보장한다.

인덱스 만드는 쿼리

1) MySQL

클러스터형 인덱스(Clustered Index)
MySQL에서는 InnoDB 스토리지 엔진을 사용할 때, 기본 키(Primary Key)가 자동으로 클러스터형 인덱스가 됩니다.

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
) ENGINE=InnoDB;

보조 인덱스(secondary index)
보조 인덱스(Secondary Index)는 클러스터형 인덱스 외에 추가적으로 생성되는 인덱스입니다.

CREATE INDEX index_name ON table_name (column_name);

#user 테이블의 email 칼럼에 인덱스를 생성
CREATE INDEX idx_users_email ON users (email);

인덱스 최적화 기법

1) 인덱스는 비용이다
: 인덱스는 성능을 높여주는 중요한 도구이지만, 그것을 생성하고 유지하는데 비용이 든다. 인덱스는 단순히 검색 속도를 높이는 도구가 아니라, 다음과 같은 비용을 수반한다.

  • 저장공간
  • 쓰기 성능 저하
  • 관리 복잡성

2) 항상 테스팅하라
: 인덱스를 생성하거나 삭제하기 전에 테스트를 통해 실제로 성능이 개선되는지 확인해야 한다. 이는 데이터베이스 최적화의 기본 원칙 중 하나로, 인덱스가 성능에 미치는 영향을 예측만 하고 실제 테스트를 하지 않으면 예상치 못한 성능저하가 발생할 수 있다.

방법
EXPLAIN 명령어 사용

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

3) 복합 인덱스는 같음,정렬,다중 값,카디널리티 순이다.
: 복합 인덱스는 여러 개의 컬럼을 조합한 인덱스로, 특정한 순서에 따라 쿼리 성능을 최적화할 수 있습니다. 복합 인덱스를 설계할 때는 쿼리에서 사용되는 조건의 순서를 고려해야 하며, 가장 최적화된 순서는 같음(equal),정렬(order),다중 값(multi-value), 카디널리티 이다.

같음 : =
정렬 : ORDER BY,GROUP BY
다중 값 : IN,BETWEEN

ELECT * FROM users WHERE age = 30 ORDER BY signup_date

SELECT * FROM users WHERE age = 30 AND signup_date BETWEEN '2024-01-01' AND '2024-12-31
profile
Linux,Window,Network,docker,kubernets

0개의 댓글