인덱스란?
인덱스(index)는 데이터베이스에서 검색 성능을 높이기 위해 사용되는 자료구조이다. 인덱스는 책의 목차처럼, 특정 열(column)의 값을 기준으로 데이터를 빠르게 찾을 수 있도록 도와준다. 인덱스가 없을 경우, 데이터베이스는 풀 스캔(full scan)을 수행하게 되며, 이는 테이블의 모든 데이터를 읽어야 하기 때문에 비효율적이다..
인덱스의 동작 방식
인덱스는 키-값 쌍(key-value pair) 구조로 되어 있으며, 다음과 같은 동작 방식을 가진다.
- 인덱스는 정렬된 상태로 유지되며, 검색 시 이진 탐색이 가능해 빠른 조회가 가능하다.
- 데이터를 삽입하거나 삭제할 때, 인덱스도 함께 업데이트된다/
- 인덱스는 일반적으로 B-Tree, B+Tree, Hash Table 등의 자료구조를 사용하여 구현된다.
- 예를 들어, SELECT * FROM users WHERE age = 30 쿼리를 실행할 때, age 열에 인덱스가 있다면 데이터베이스는 인덱스를 통해 해당 값의 위치를 빠르게 찾을 수 있다.
인덱스를 설정할 기준
인덱스를 설정할 때는 다음과 같은 기준을 고려해야 합니다:
- 자주 검색되는 열: WHERE, JOIN, ORDER BY, GROUP BY에서 자주 사용되는 열에 인덱스를 설정
- 카디널리티(Cardinality): 열의 고유한 값의 수가 많은 경우 인덱스의 효과가 더 높다.
- 테이블의 크기: 작은 테이블에서는 인덱스의 이점이 크지 않으므로, 큰 테이블에 우선적으로 인덱스를 설정한다.
- 데이터 수정 빈도: 자주 수정되는 열은 인덱스 업데이트 비용이 크므로 신중하게 고려해야한다.
인덱스를 많이 설정하면 좋을까요?
인덱스를 너무 많이 설정하면 오히려 성능이 저하될 수 있다.
- 쓰기 성능 저하: 인덱스는 삽입, 삭제, 수정 시마다 업데이트되므로 쓰기 작업이 느려질 수 있다..
- 공간 낭비: 인덱스는 별도의 저장 공간을 사용하므로, 많은 인덱스를 설정하면 스토리지 사용량이 증가한다.
- 복잡한 실행 계획: 너무 많은 인덱스는 데이터베이스가 적절한 인덱스를 선택하기 어렵게 만들어 실행 계획이 복잡해질 수 있다.
따라서, 인덱스는 필요한 열에 한정하여 신중하게 설정해야 합니다.
'Database' 카테고리의 다른 글
[데이터베이스] Transaction (트랜잭션) (1) | 2024.11.28 |
---|---|
[데이터베이스] 이상과 정규화 (0) | 2024.11.21 |
[데이터베이스] B-Tree 인덱스와 B+Tree 인덱스 (0) | 2024.11.13 |
[데이터베이스] 순차 I/O와 랜덤 I/O (2) | 2024.11.12 |
[데이터베이스] Pagination 구현 SQL (1) | 2024.11.08 |