Notice
Recent Posts
Recent Comments
Link
관리 메뉴

데브마우스

[SQL] 인덱스의 개념 정리 본문

데이터베이스/SQL: 정리

[SQL] 인덱스의 개념 정리

데브마우스 2024. 1. 5. 00:20

인덱스란 무엇인가요?

  • 인덱스는 SELECT를 사용해서 테이블을 조회할 때 결과를 빠르게 추출하도록 도와주는 기능입니다.
  • 인덱스는 PK라고 말해도 거의 무관합니다.
  • 클러스터형 인덱스는 기본 키로 지정되면 자동생성되며 테이블 당 1개만 가능합니다.
  • 보조 인덱스는 고유 키로 지정하면 자동 생성되며 여러개 만들 수 있지만 자동 정렬되지는 않습니다.

인덱스의 장단점은 무엇인가요?

장점:

  • 아주 빠른 응답속도를 얻을 수 있습니다. 
  • 결과적으로 전체 시스템의 성능이 향상되는 효과가 있습니다.

단점:

  • 인덱스도 공간을 차지해서 데이터베이스 안에 추가적인 공간(약 10% 정도)가 필요합니다.
  • SELECT가 아닌 데이터의 변경 작업(INSERT, UPDATE, DELETE)이 자주 일어나면 오히려 성능이 나빠질 수 있습니다. (그래서 주로 회원정보처럼 PK가 변경되지 않는 곳에 사용합니다.)

인덱스의 종류는 어떤게 있나요?

인덱스는 2가지 종류가 있습니다. 클러스터형 인덱스(PK)보조 인덱스(UNIQUE)가 있습니다.

클러스터형 인덱스(PK)는 영어사전, 국어사전에 비유할 수 있습니다.

보조 인덱스(UNIQUE)는 책 뒤의 찾아보기에 비유할 수 있습니다.

자동으로 생성되는 인덱스

  • 인덱스는 테이블의 열(컬럼) 단위에 생성됩니다.
  • 하나의 열에 여러 개의 인덱스 생성 가능합니다.
  • 여러 개의 열을 묶어서 하나의 인덱스를 생성할 수도 있습니다.
  • 테이블 생성시 PK로 정의한 컬럼은 자동으로 클러스터형 인덱스가 생성됩니다.

테이블의 인덱스를 어떻게 확인하나요?

아래 SQL문으로 인덱스 정보를 확인하실 수 있습니다.

간단한 테이블을 만들고 인덱스 정보를 확인하는 SQL문입니다.

USE 데이터베이스_이름;
CREATE TABLE 테이블_이름(
	col1 INT PRIMARY KEY,
    co2 INT
);
	
SHOW INDEX FROM 테이블_이름;

 

고유키(UNIQUE)도 인덱스가 생성됩니다. 다음은 보조 테이블을 여러 개 생성한 후 인덱스 정보를 확인하는 SQL문입니다. 

CREATE TABLE 테이블_이름 (
	col1 INT PRIMARY KEY,
    col2 INT UNIQUE,
    col3 INT UNIQUE
);

SHOW INDEX FROM 테이블_이름;

 

자동으로 정렬되는 클러스터형 인덱스(PK)

클러스터 형 인덱스(PK)는 영어 사전이나 단어 사전에 비유할 수 있습니다. 언어 사전의 큰 특징은 단어가 알파벳 순서대로 정렬되어 있습니다.

 

아래 SQL문으로 통해서 테이블의 특정 컬럼을 PK로 변경하실 수 있습니다.

ALTER TABLE member
	ADD CONSTRAINT
    PRIMARY KEY(mem_name); -- 클러스터형 인덱스 생성

 

기본 키(PK) 변경 시 주의할 점

이미 대용량의 데이터가 있는 상태에서 기본 키를 지정하면 안됩니다. 하시려면 똑같은 DB를 생성한 후 전문가가 신중하게 진행해야 합니다. 실제 서비스 중인 회사에서 기본 키를 변경할 경우 데이터베이스(자산)에 막대한 손해를 입히게 됩니다.

 

정렬되지 않는 보조 인덱스

  • 보조 인덱스는 여러 개를 만들 수 있습니다.
  • 보조 인덱스 생성 시 마다 DB의 공간을 차지하게 됩니다.
  • 꼭 필요한 열에만 보조 인덱스를 생성하셔야합니다.

아래 SQL문으로 특정 컬럼을 UNIQUE로 변경하실 수 있습니다.

ALTER TABLE member
	ADD CONSTRAINT
    UNIQUE (컬럼_이름);