테이블 인덱싱

LJM·2023년 10월 11일
0

DB

목록 보기
6/7

테이블 인덱싱은 데이터베이스 성능 최적화의 핵심 요소 중 하나입니다. 인덱싱의 주된 목적은 데이터 검색 성능을 향상시키는 것입니다. 아래에서 테이블 인덱싱에 대해 자세히 설명하겠습니다.

  1. 인덱스란?

인덱스는 데이터베이스 테이블의 한 열(또는 여러 열)에 대한 데이터 구조입니다.
주요 목적은 테이블의 데이터에 빠르게 접근하는 것입니다.
인덱스는 일반적으로 B-트리, B+ 트리와 같은 트리 구조나 해시 구조를 사용하여 데이터를 저장합니다.

  1. 작동 원리:

인덱스는 '키'와 '포인터'의 조합으로 구성됩니다. '키'는 인덱싱할 열의 데이터 값을 나타내고, '포인터'는 해당 값이 있는 행을 가리킵니다.
인덱스를 사용하면 데이터베이스는 전체 테이블을 스캔하지 않고도 해당 키 값을 빠르게 찾을 수 있습니다.

  1. 장점:

빠른 데이터 검색: 특정 조건에 일치하는 데이터를 빠르게 찾을 수 있습니다.
정렬 및 집계 연산 최적화: 인덱스는 정렬된 상태로 데이터를 저장하기 때문에 정렬 및 집계 연산이 빠르게 수행됩니다.

  1. 단점:

저장 공간: 인덱스 자체도 저장 공간을 차지합니다.
데이터 수정 오버헤드: 데이터 삽입, 수정, 삭제 시에 인덱스도 함께 업데이트되어야 합니다. 따라서 쓰기 연산의 성능에 부담을 줄 수 있습니다.

  1. 주의사항:

모든 열에 인덱스를 생성하는 것은 비효율적입니다. 자주 검색되거나 WHERE 절, JOIN 조건 등에서 사용되는 열에 주로 인덱스를 생성합니다.
인덱스의 수가 많아지면, 데이터의 삽입, 수정, 삭제 성능이 떨어질 수 있습니다.

  1. 종류:

단일 열 인덱스: 하나의 열에 대한 인덱스입니다.
복합 열 인덱스: 두 개 이상의 열을 조합하여 인덱스를 생성합니다.
유니크 인덱스: 중복되지 않는 값을 가진 열에 대한 인덱스입니다.
풀 텍스트 인덱스: 텍스트 데이터의 전체 텍스트 검색을 위한 인덱스입니다.
결론적으로, 테이블 인덱싱은 데이터 검색 성능을 향상시키기 위한 핵심 기능입니다. 그러나 적절한 열에만 인덱스를 생성하고 관리하는 것이 중요합니다.

별도의 데이터 구조: 인덱스는 일종의 별도의 데이터 구조(예: B-트리, 해시 테이블 등)로 저장됩니다. 이 구조는 인덱싱하려는 열의 값과 해당 값이 위치한 레코드의 주소나 포인터를 함께 저장합니다.

테이블의 구조 변경 없음: 기존의 테이블 구조에는 변화가 없습니다. 인덱스는 별도로 관리되는 메타데이터입니다. 즉, 테이블 스키마나 기존 열에는 영향을 주지 않습니다.

저장 공간: 인덱스는 추가적인 저장 공간을 차지합니다. 왜냐하면 인덱스용 데이터 구조에 인덱싱하려는 열의 데이터와 함께 포인터 정보도 저장되기 때문입니다.

외래키와 인덱스: 외래키는 테이블 간의 관계를 정의하는 제약 조건입니다. 외래키 제약 조건이 있는 열에는 자동으로 인덱스가 생성되는 RDBMS도 있습니다. 외래키를 통한 조회 성능 향상을 위해 이렇게 합니다. 하지만 외래키 자체가 인덱스는 아닙니다.

결론적으로, 인덱스는 기존 테이블의 열이나 구조에 변화를 주지 않으면서 검색 성능을 최적화하기 위한 별도의 데이터 구조로 생성됩니다.

맞습니다. 테이블 인덱싱을 할 때 SQL로 인덱스를 생성하는 경우, 사용자는 어느 열을 인덱스의 키값으로 사용할지 지정해야 합니다.

예를 들어, users라는 테이블이 있고, email 열을 기반으로 인덱스를 생성하고자 한다면, 다음과 같은 SQL문을 사용할 수 있습니다:

CREATE INDEX idx_email ON users(email);

복합 인덱스를 생성하려면, 여러 열을 지정해야 합니다. 예를 들어, first_name과 last_name 두 열을 기반으로 인덱스를 생성하고자 한다면, 다음과 같이 작성할 수 있습니다:

CREATE INDEX idx_name ON users(first_name, last_name);
profile
게임개발자 백엔드개발자

0개의 댓글