인덱스: 두 판 사이의 차이

기술노트
(Gemini 벌크 업로더로 자동 업로드)
(Gemini 벌크 업로더로 자동 업로드)
 
33번째 줄: 33번째 줄:
----
----


=== 💡 개발자 핵심 Point ===
=== 💡 정보처리기사 핵심 Point ===


* 인덱스는 '''읽기 작업은 빠르게, 쓰기 작업은 느리게''' 만듭니다.
* 인덱스는 '''읽기 작업은 빠르게, 쓰기 작업은 느리게''' 만듭니다.

2025년 9월 6일 (토) 05:54 기준 최신판

🔑 인덱스 (Index)

데이터베이스의 인덱스는 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 책의 맨 뒤에 있는 '찾아보기(색인)'와 같은 역할을 합니다. 특정 내용을 찾기 위해 책의 모든 페이지를 다 뒤지는 대신, 찾아보기를 통해 원하는 내용이 있는 페이지를 바로 찾을 수 있듯이, 인덱스는 데이터베이스가 특정 데이터를 빠르게 찾을 수 있도록 도와줍니다.


🤔 인덱스는 왜 필요한가?

인덱스가 없는 테이블에서 특정 데이터를 찾으려면, 데이터베이스는 테이블의 모든 행을 처음부터 끝까지 순차적으로 검색해야 합니다. 이를 풀 테이블 스캔(Full Table Scan)이라고 합니다. 데이터의 양이 적을 때는 문제가 없지만, 수백만, 수천만 건의 데이터가 있는 테이블에서는 풀 테이블 스캔이 매우 느리고 시스템에 큰 부하를 줍니다.

인덱스는 데이터와 해당 데이터의 위치(주소)를 키-값 쌍으로 미리 정렬하여 저장해 둠으로써, 풀 테이블 스캔을 피하고 데이터 검색 속도를 획기적으로 향상시킵니다.


⚙️ 인덱스의 동작과 자료구조

대부분의 RDBMS는 인덱스를 구현하기 위해 B-Tree(Balanced Tree) 자료구조를 사용합니다. B-Tree는 항상 균형을 유지하도록 설계된 트리 구조로, 어떤 값을 찾더라도 항상 비슷한 시간 복잡도(O(log N))로 데이터를 빠르게 검색할 수 있습니다.

  • SELECT 쿼리의 `WHERE` 절이나 `JOIN` 조건에 사용되는 컬럼에 인덱스를 생성하면 성능이 크게 향상됩니다.

⚖️ 인덱스의 장단점

  • 장점 :

> * 데이터 검색(SELECT) 속도가 매우 빨라집니다.

  • 단점 :

> * 추가 저장 공간: 인덱스 자체도 공간을 차지하므로, 테이블 크기의 약 10% 정도의 추가 공간이 필요합니다. > * 느린 CUD(Create, Update, Delete) 속도: 데이터를 추가, 수정, 삭제할 때마다 인덱스 테이블도 함께 업데이트해야 하므로, 쓰기 작업의 성능이 저하됩니다. > * 무분별한 사용의 위험: 너무 많은 인덱스는 오히려 성능을 저하시킬 수 있습니다.


💡 정보처리기사 핵심 Point

  • 인덱스는 읽기 작업은 빠르게, 쓰기 작업은 느리게 만듭니다.
  • 따라서, 데이터의 변경(INSERT, UPDATE, DELETE)은 적고 검색은 빈번한 컬럼에 인덱스를 생성하는 것이 가장 효과적입니다.
  • 카디널리티(Cardinality), 즉 중복도가 낮은(고유한 값이 많은) 컬럼에 인덱스를 생성해야 효율이 좋습니다. (예: `주민등록번호` O, `성별` X)
  • SQL 쿼리의 실행 계획(Execution Plan)을 분석하여, 쿼리가 인덱스를 잘 활용하고 있는지 주기적으로 확인하고 최적화하는 습관이 중요합니다.