인덱스가 뭐임
데이터를 BTree로 정렬해서 반씩/3분의 2씩 소거하면서 조회 가능
데이터베이스에서 인덱스를 추가하는 것은 쿼리 성능을 향상시키는 데 중요한 역할을 합니다.
그러나 인덱스를 사용하는 데는 장단점이 모두 존재합니다.
장점
- 쿼리 성능 향상:
- 인덱스를 사용하면 데이터베이스가 테이블에서 데이터를 더 빨리 검색할 수 있습니다. 이는 특히 대규모 데이터셋에서 유용합니다.
-
더보기인덱스를 사용하면 왜 검색 속도가 빨라지는가?
데이터베이스 인덱스를 사용하면 검색 속도가 빨라지는 이유는 인덱스가 데이터 검색 과정을 효율적으로 최적화하기 때문입니다. 이를 이해하기 위해서는 인덱스가 어떻게 작동하는지와 데이터베이스에서 데이터를 검색하는 과정에서 인덱스가 어떤 역할을 하는지 살펴보는 것이 중요합니다.인덱스의 작동 원리
- 데이터 구조 사용:
- 인덱스는 B-트리(Balanced Tree) 또는 해시 테이블과 같은 효율적인 데이터 구조를 사용하여 특정 열의 값을 정렬하고 저장합니다.
- B-트리 구조는 이진 트리(binary tree)와 유사하지만, 균형을 유지하여 검색, 삽입, 삭제 작업에서 일정한 시간 복잡도를 보장합니다.
- 정렬된 데이터:
- 인덱스는 특정 열의 값을 기준으로 데이터를 정렬하여 저장합니다. 이는 데이터베이스가 해당 열의 값을 빠르게 검색하고, 범위 쿼리(range query)를 효율적으로 수행할 수 있게 합니다.
검색 속도 향상 이유
- 감소된 데이터 페이지 액세스:
- 인덱스를 사용하지 않는 경우, 데이터베이스는 전체 테이블을 스캔(Full Table Scan)해야 하며, 이는 매우 비효율적입니다. 큰 테이블일수록 더 많은 데이터 페이지를 읽어야 하므로 시간이 많이 소요됩니다.
- 인덱스를 사용하면, 데이터베이스는 인덱스를 통해 관련 데이터를 포함하는 데이터 페이지를 직접 찾아 접근할 수 있습니다. 이는 데이터베이스가 불필요한 데이터 페이지를 읽지 않도록 하여 검색 속도를 크게 향상시킵니다.
- 빠른 검색:
- 인덱스는 정렬된 데이터 구조를 사용하므로, 데이터베이스는 이진 검색(binary search) 알고리즘을 사용하여 원하는 값을 빠르게 찾을 수 있습니다.
- 예를 들어, B-트리 인덱스를 사용하면, 데이터베이스는 트리의 루트에서 시작하여 각 노드를 순차적으로 탐색하면서 값을 찾을 수 있습니다. 이는 데이터의 크기에 대해 로그 시간 복잡도(logarithmic time complexity)를 가집니다.
- 효율적인 범위 검색:
- 인덱스는 데이터가 정렬된 상태로 저장되기 때문에, 특정 범위의 데이터를 검색할 때 매우 효율적입니다. 데이터베이스는 시작점과 끝점을 빠르게 찾고, 그 사이의 데이터를 순차적으로 읽어들일 수 있습니다.
- 예를 들어, WHERE 조건이 특정 범위의 값을 찾는 경우, 인덱스를 사용하면 해당 범위의 시작과 끝을 빠르게 찾고 중간 값을 효율적으로 읽을 수 있습니다.
예시
- 전체 테이블 스캔(Full Table Scan):
- SELECT * FROM customers WHERE last_name = 'Smith';
- 인덱스가 없으면, 데이터베이스는 customers 테이블의 모든 행을 확인해야 합니다. 행 수가 많을수록 검색 시간이 오래 걸립니다.
- 인덱스를 사용한 검색:
-
CREATE INDEX idx_last_name ON customers(last_name);
SELECT * FROM customers WHERE last_name = 'Smith'; - 인덱스가 있으면, 데이터베이스는 idx_last_name 인덱스를 사용하여 'Smith'가 있는 위치를 빠르게 찾고, 해당 데이터 페이지로 바로 접근합니다.
결론
인덱스를 사용하면 데이터베이스가 전체 데이터를 스캔하지 않고도 필요한 데이터를 빠르게 찾을 수 있기 때문에 검색 속도가 크게 빨라집니다. 인덱스는 데이터 구조와 정렬을 활용하여 효율적인 데이터 액세스를 가능하게 하며, 이는 데이터베이스 성능 최적화의 핵심 요소입니다.
- 데이터 구조 사용:
-
- 인덱스를 사용하면 데이터베이스가 테이블에서 데이터를 더 빨리 검색할 수 있습니다. 이는 특히 대규모 데이터셋에서 유용합니다.
단점
- 쓰기 성능 저하:
- 인덱스를 추가하면 데이터 삽입, 업데이트, 삭제 작업이 느려질 수 있습니다.
- 인덱스를 유지 관리해야 하므로, 데이터 변경 시 추가적인 오버헤드가 발생합니다.
- 디스크 공간 증가:
- 인덱스는 추가적인 저장 공간을 필요로 합니다.
- 테이블이 클수록 인덱스 크기도 커지며, 여러 인덱스를 추가하면 디스크 사용량이 급격히 증가할 수 있습니다.
- 관리 복잡성 증가:
- 여러 인덱스를 관리하는 것은 복잡할 수 있습니다.
- 잘못된 인덱스 설정은 쿼리 성능을 저하시킬 수 있으며, 인덱스 유지 보수에 신경을 써야 합니다.
- 인덱스 재빌드 필요:
- 데이터베이스의 크기나 데이터 분포가 크게 변할 경우 인덱스를 재구성해야 할 수도 있습니다.
- 이는 시스템 자원을 많이 소모하는 작업일 수 있으며, 데이터베이스 성능에 영향을 미칠 수 있습니다.
결론
장점:
- 검색 속도 향상
- 정렬 작업 성능 개선
- 쿼리 실행 계획 최적화
쿼리 실행 계획 최적화란
쿼리 실행 계획 최적화는 데이터베이스 관리 시스템(DBMS)이 SQL 쿼리를 가장 효율적으로 실행하기 위한 방법을 결정하는 과정을 말합니다. 인덱스는 이 과정에서 중요한 역할을 합니다.
주요 포인트:
1. 쿼리 분석: DBMS는 주어진 쿼리를 분석하여 최적의 실행 방법을 찾습니다.
2. 통계 정보 활용: 테이블 크기, 데이터 분포, 인덱스 등의 정보를 활용합니다.
3. 접근 경로 선택: 테이블 스캔, 인덱스 스캔 등 다양한 방법 중 최적의 방법을 선택합니다.
4. 조인 순서 결정: 여러 테이블을 조인할 때 가장 효율적인 순서를 결정합니다.
단점:
- 추가 저장 공간 필요
- 데이터 변경 작업(삽입, 수정, 삭제) 시 성능 저하
- 인덱스 관리에 따른 추가적인 작업 필요
'컴퓨터 > 데이터베이스' 카테고리의 다른 글
NoSQL의 장단점 (0) | 2024.08.05 |
---|