Post

DB Indexing

DB Indexing
2024-07-18

😱 DB Indexing 이해와 실습

📚 인덱스: 데이터베이스 동작 속도를 높여주는 도구

데이터베이스에서 인덱스는 테이블의 동작 속도를 높이는 중요한 자료구조입니다. 예를 들어, 사전에서 단어를 찾을 때 알파벳 순으로 정렬된 목록을 이용해 빠르게 찾을 수 있듯이, 데이터베이스에서도 인덱스를 사용해 데이터를 효율적으로 검색할 수 있습니다.

📌 인덱스의 종류

Clustered Index (군집화 인덱스)

  • 특징: 데이터가 인덱스 순서에 따라 물리적으로 정렬되어 저장됩니다.
  • 제한: 하나의 테이블에 하나만 생성할 수 있습니다.
  • 사용 예시: 주로 기본 키(Primary Key)에 사용됩니다.
  • 장점: 데이터 검색 속도가 빠르며, 범위 쿼리에 유리합니다.
  • 단점: 데이터 수정, 삽입, 삭제 시 성능 저하가 발생할 수 있습니다.

NonClustered Index (비군집화 인덱스)

  • 특징: 인덱스와 데이터가 별도로 저장되며, 인덱스는 실제 데이터의 포인터를 가집니다.
  • 제한: 한 테이블에 여러 개 생성할 수 있습니다.
  • 사용 예시: 자주 조회하는 컬럼에 생성합니다.
  • 장점: 다양한 쿼리에 유연하게 대응할 수 있습니다.
  • 단점: 인덱스가 많아질수록 쓰기 성능이 저하될 수 있습니다.

🌲 B-Tree: 인덱스의 핵심 구조

B-Tree는 데이터베이스 인덱스에서 주로 사용하는 트리 구조입니다. 데이터가 정렬된 상태로 유지되며, 이진 탐색과 비슷한 방식으로 동작하여 O(log N)의 시간 복잡도로 데이터를 검색할 수 있습니다. B-Tree는 균형 트리로서 모든 리프 노드가 동일한 깊이에 있어 효율적인 검색, 삽입, 삭제가 가능합니다.

🛠️ Query Plan: 쿼리 최적화

쿼리 플랜은 데이터베이스가 쿼리를 실행하기 위해 사용하는 실행 계획입니다. 이를 통해 데이터베이스는 쿼리를 가장 효율적으로 처리할 방법을 결정합니다.

옵티마이저: 데이터베이스의 내부 엔진

  • 규칙기반 옵티마이저: 미리 정의된 규칙에 따라 쿼리를 최적화합니다.
  • 비용기반 옵티마이저: 쿼리의 실행 비용을 계산하여 최적의 실행 계획을 선택합니다.

대부분의 상용 데이터베이스에서는 EXPLAIN 명령어를 사용하여 쿼리 플랜을 확인할 수 있습니다. 쿼리 플랜을 분석함으로써 비효율적인 쿼리를 찾아내고, 이를 개선하여 성능을 최적화할 수 있습니다.

💼 실무에서의 인덱스 튜닝

  • 이것을 튜닝하는 것도 하나의 직업이 된다(몸 값 높음)

인덱스 튜닝은 단순히 인덱스를 추가하는 것 이상으로 복잡합니다. 올바른 인덱스를 선택하고 관리하는 것은 데이터베이스 성능 최적화의 핵심입니다. 효율적인 인덱스 설계와 쿼리 최적화는 데이터베이스 관리자(DBA)와 성능 전문가의 중요한 역할 중 하나입니다. 이들의 역할은 데이터베이스 성능을 최적화하여 비즈니스 요구사항을 충족시키는 것입니다.


🎓 추가로 알아두면 좋은 내용

  • 인덱스 조합: 여러 컬럼을 포함하는 복합 인덱스(composite index)를 사용하면 특정 조건의 쿼리 성능을 크게 향상시킬 수 있습니다.
  • 인덱스 유지보수: 인덱스도 시간이 지나면 단편화(fragmentation)될 수 있으므로 주기적으로 유지보수 작업이 필요합니다.
  • 통계 정보: 옵티마이저가 더 나은 결정을 내리도록 도와주기 위해 테이블의 통계 정보를 주기적으로 업데이트해야 합니다.
  • 커버링 인덱스: 쿼리에서 필요한 모든 컬럼을 포함하는 인덱스로, 데이터 페이지를 읽지 않고 인덱스만으로 쿼리를 해결할 수 있어 성능을 극대화할 수 있습니다.

인덱스와 쿼리 최적화는 데이터베이스 성능을 극대화하는 데 필수적인 요소입니다. 이를 잘 이해하고 활용하면, 데이터베이스의 속도와 효율성을 크게 향상시킬 수 있습니다. 🌟

This post is licensed under CC BY 4.0 by the author.