오늘 뭐했냐/개발에 대한 주저리

23.09.14 인덱스(index)

스스로에게 2023. 9. 17. 06:26

데이터베이스에서 인덱스는 데이터 검색 속도를 향상시키기 위한 자료구조이다. 인덱스를 사용하면 테이블의 모든 데이터를 순차적으로 검색하지 않고도 빠르게 원하는 데이터를 찾을 수 있다.

 

일반적인 원리

  1. 정렬과 트리 구조: 일반적으로 인덱스는 B-트리, B+ 트리, 해시 테이블 등 다양한 자료구조를 사용할 수 있다. 이러한 구조를 통해 데이터의 검색, 삽입, 삭제 연산이 빠르게 이루어진다.
  2. 키와 값: 인덱스는 '키(key)'와 '값(value)'의 쌍으로 구성된다. 키는 인덱스를 구성하는 열(column)의 값이며, 값은 실제 데이터 레코드를 가리키는 포인터 또는 해당 레코드의 위치이다.
    ( userId가 1이라면 1이 키이고, 1이 가리키는 위치가 값이다.) 
  3. 쿼리 최적화: SQL 쿼리가 실행될 때 데이터베이스 관리 시스템(DBMS)은 가능한 효율적인 방법으로 데이터를 찾기 위해 인덱스를 사용한다.

장점

  1. 검색 속도 향상: 특정 조건에 맞는 레코드를 빠르게 찾을 수 있다.
  2. 정렬된 데이터 접근: 인덱스를 사용하면 데이터를 정렬된 형태로 빠르게 접근할 수 있다.

단점

  1. 저장 공간: 인덱스 자체도 디스크 공간을 차지한다.
  2. 삽입/삭제/갱신 오버헤드: 레코드가 삽입, 삭제, 갱신될 때마다 인덱스도 갱신되어야 하므로 추가적인 연산이 필요하다.

참고

  1. B-Tree (Balanced Tree): B-트리는 자가 균형 이진 검색 트리의 일반화된 형태이며, 많은 데이터베이스 시스템에서 기본 인덱스로 사용된다. B-트리는 여러 개의 키를 하나의 노드에 저장할 수 있으며, 디스크 I/O 작업을 최소화하는 것을 목표로 설계되었다.
  2. B+ Tree: B+ 트리는 B-트리의 변형으로, 모든 값들이 *리프 노드에만 저장된다. 이로 인해 B+ 트리는 *레인지 쿼리(range queries)에 더 효율적이며, 일반적으로 B-트리보다 디스크 I/O 작업이 더 적게 발생합니다.
  3. Hash Index: 해시 인덱스는 키를 해시 함수를 통해 변환하여 값이 저장될 위치를 결정합니다. 해시 인덱스는 특정 키를 빠르게 찾을 수 있지만, 레인지 쿼리나 정렬 작업에는 적합하지 않습니다.

*리프 노드 : 트리 자료 구조에서 자식 노드를 가지지 않는 노드를 의미한다. 즉, 리프 노드는 트리의 가장 아래 층에 위치하며, 이 노드에서는 더 이상 아래로 내려가는 경로가 없다.

*레인지 쿼리 : 주어진 범위 내의 데이터를 검색하는 쿼리를 의미한다.
(예 : 가격이 1000원 이상 5000원 이하인 상품을 찾는 경우)