6장 : 인덱스
06-1 인덱스 개념을 파악하자
1. 인덱스의 개념
인덱스는 데이터베이스에서 데이터를 빠르게 검색하고 가져오는 데 도움을 주는 자료구조입니다. 인덱스는 책의 찾아보기와 유사하게, 특정 열(칼럼)의 값을 정렬하고 그 값을 사용하여 빠르게 원하는 데이터를 찾아올 수 있도록 도와줍니다. 이렇게 인덱스를 사용하면 전체 데이터를 처음부터 하나하나 확인하지 않아도 원하는 데이터를 빠르게 찾아올 수 있습니다.
2. 인덱스의 종류
MySQL에서는 여러 종류의 인덱스를 지원합니다. 이 중에서 가장 널리 사용되는 세 가지 종류에 대해 설명해보겠습니다..!
- 기본 인덱스 (Primary Index) : 테이블에는 기본 키(primary key)라는 고유한 식별자 열이 있을 수 있습니다. 이 기본 키 열에 자동으로 기본 인덱스가 생성됩니다. 기본 인덱스는 테이블의 모든 행을 유일하게 식별하며, 행을 빠르게 찾는 데 사용됩니다.
- 유니크 인덱스 (Unique Index) : 유니크 인덱스는 특정 열의 값이 중복되지 않도록 유지하는 데 사용됩니다. 즉, 해당 열에는 같은 값이 중복되어 들어가지 않습니다. 주로 식별자 열이나 중복을 허용하지 않아야 하는 열에 유용하게 사용됩니다.
- 일반 인덱스 (Normal Index) : 이것은 가장 일반적으로 사용되는 인덱스 형태로, 원하는 열에 대해 생성할 수 있는 일반적인 인덱스입니다. 이 인덱스를 사용하면 특정 열의 값을 기반으로 데이터를 빠르게 검색할 수 있습니다.
06-2 인덱스의 내부 작동
1. 인덱스의 내부 작동 원리
인덱스는 데이터베이스 내의 특정 열(칼럼)에 대한 정렬된 목록으로, 데이터를 빠르게 찾기 위한 도구입니다. 인덱스는 특정 열의 값과 해당 값이 저장된 실제 데이터 위치를 연결해주는 역할을 합니다. 이렇게 인덱스를 사용하면 데이터베이스 엔진은 데이터를 효율적으로 검색할 수 있습니다.
인덱스를 사용하여 데이터를 찾을 때, 데이터베이스 엔진은 다음과 같은 과정을 수행합니다
1. 인덱스 구조를 이용해 원하는 값의 위치를 파악합니다.
2. 해당 값이 저장된 실제 데이터 위치를 찾아 데이터를 가져옵니다.
이렇게 인덱스를 사용하면 데이터베이스가 모든 데이터를 처음부터 순차적으로 확인하지 않고도 원하는 데이터를 빠르게 찾을 수 있게 됩니다.
2. 인덱스의 구조
인덱스는 여러 가지 데이터 구조를 사용하여 구현될 수 있지만, 가장 일반적인 형태는 B-Tree (Balanced Tree) 구조입니다.
B-Tree는 균형 잡힌 트리 구조로, 데이터를 빠르게 검색하고 삽입, 삭제할 수 있는 효율적인 방법을 제공합니다.
B-Tree 인덱스의 구조는 다음과 같습니다!!
루트 노드: 가장 상위 노드로, 인덱스의 시작점을 가리킵니다.
내부 노드: 인덱스 키의 범위를 정의하고, 하위 노드를 연결하는 역할을 합니다.
리프 노드: 실제 데이터의 위치를 가리키며, 인덱스 키와 함께 데이터를 저장합니다.
이 구조를 통해 인덱스 키를 효율적으로 검색하고, 데이터를 찾아오는 데 필요한 I/O 작업을 최소화할 수 있습니다. 인덱스는 데이터베이스의 검색 성능을 향상시키는 핵심적인 역할을 합니다.
06-3 인덱스의 실제 사용
1. 인덱스 생성과 제거 문법
인덱스 생성
CREATE INDEX index_name ON table_name (column_name);
- index_name: 생성할 인덱스의 이름을 지정합니다.
- table_name: 인덱스를 생성할 테이블의 이름을 지정합니다.
- column_name: 인덱스를 생성할 열(칼럼)의 이름을 지정합니다.
예를 들어, users 테이블의 username 열에 인덱스를 생성하려면 다음과 같이 작성할 수 있습니다
CREATE INDEX idx_username ON users (username);
인덱스 제거
DROP INDEX index_name ON table_name;
- index_name: 제거할 인덱스의 이름을 지정합니다.
- table_name: 인덱스가 생성된 테이블의 이름을 지정합니다.
예를 들어, 위에서 생성한 idx_username 인덱스를 제거하려면 다음과 같이 작성할 수 있습니다
DROP INDEX idx_username ON users;
Tip. 인덱스를 효과적으로 사용하는 방법
1. 인덱스는 열 단위에 생성한다.
2. WHERE 절에서 사용되는 열에 인덱스를 만들어야 한다.
3. WHERE 절에 사용되더라도 자주 사용해야 가치가 있다.
4. 데이터의 중복이 높은 열은 인덱스를 만들어도 별 효과가 없다.
5. 클러스터형 인덱스는 테이블당 하나만 생성할 수 있다.
6. 사용하지 않는 인덱스는 제거한다.
'혼공학습단 > SQL' 카테고리의 다른 글
[Sql] Chapter 07. 스토어드 프로시저 (2) | 2023.08.20 |
---|---|
[Sql] 혼공학습단 10기_5주차 미션 (2) | 2023.08.13 |
[Sql] Chapter 05. 테이블과 뷰 (2) | 2023.07.30 |
[Sql] 혼공학습단 10기_4주차 미션 (0) | 2023.07.30 |
[Sql] 혼공학습단 10기_3주차 미션 (2) | 2023.07.21 |