< 인덱스(Index) 개념 >

  • 인덱스는 데이터를 빠르게 찾을 수 있는 수단으로서, 테이블에 대한 조회 속도를 높여 주는 자료 구조이다.
  • 인덱스는 테이블의 특정 레코드 위치를 알려 주는 용도로 사용한다.
  • 인덱스는 자동으로 생성되지 않는다.

  • 기본 키(PK; Primary Key) Column은 자동으로 인덱스가 생성된다.
  • 연월일이나 이름을 기준으로 하는 인덱스는 자동으로 생성되지 않는다.
  • '테이블의 이름' Column에 index가 없는 경우, 테이블의 전체 내용을 검색한다.(테이블 전체 스캔; Table Full Scan).
  • 인덱스가 생성되어 있을 때 데이터를 빠르게 찾을 수 있다.(인덱스 범위 스캔; Index Range Scan).
  • 조건절에 '='로 비교되는 컬럼을  대상으로 인덱스를 생성하면 검색 속도를 높일 수 있다.

< 인덱스(Index)의 종류 >

종류 설명
순서 인덱스(Ordered Index) 데이터가 정렬된 순서로 생성되는 인덱스,
B-Tree 알고리즘 활용(오름차순/내림차순 지정가능)
해시 인덱스(Hash Index) 해시 함수에 의해 직접 데이터에 키 값으로 접근하는 인덱스,
데이터 접근 비용이 균일, 튜플(Row) 양에 무관
비트맵 인덱스(Bitmap Index) 각 컬럼에 적은 개수 값이 저장된 경우 선택하는 인덱스,
수정 변경이 적을 경우 유용하다(생년월일, 상품번호 등)
함수 기반 인덱스(Functional Index) 수식이나 함수를 적용하여 만든 인덱스
단일 인덱스(Singled Index) 하나의 컬럼으로만 구성한 인덱스,
주 사용 컬럼이 하나일 경우 사용.
결합 인덱스(Concatenated Index) 두 개 이상의 컬럼으로 구성한 인덱스,
WHERE 조건으로 사용하는 빈도가 높은 경우 사용한다.
클러스터드 인덱스(Clutered Index) 기본 키(PK)를 기준으로 레코드를 묶어서 저장하는 인덱스,
저장 데이터의 물리적 순서에 따라 인덱스가 생성된다.
특정 범위 검색 시 유리 하다.

< 인덱스(Index) 생성 및 삭제, 변경 하기 >

[생성]

CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명);

 

여기서 [ ]는 생략 가능해도 되고 안해도 된다는 것.

UNIQUE : 인덱스 걸린 컬럼에 중복 값을 허용하지 않는다.

인덱스명 : 생성하고자 하는 인덱스 테이블명

테이블명 : 인덱스 대상 테이블명

컬럼명 : 테이블의 특징 컬럼명(복수 컬럼 지정 가능)

 

예를 들어  CREATE UNIQUE INDEX A ON STUDENT(ID); 이렇게 인덱스를 만들 수 있다.

혹은 UNIQUE를 생략하고 

 

CREATE INDEX idx_employee_name
ON Employee (name);

이렇게도 만들 수 있다. 

 

 

[삭제]

DROP INDEX 인덱스명;

여기서 '인덱스명'은 생성된 인덱스명을 의미하며, 인덱스를 테이블의 종속 구조로 간주하고, 삭제 시 테이블 변경 명령어가 사용된다. ALTER TABLE 명령 뒤에 DROP INDEX 명령이 추가되는 형태로 사용 된다.

 

[변경]

ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명);

 

일부 제품은 인덱스에 대한 변경 SQL 문이 없다.

기존 인덱스를 삭제 하고 신규 인덱스를 생성하는 방식으로 사용이 권고 된다. 

 

이를 실제로 생성부터 데이터 삽입과 인덱스 생성, 인덱스를 사용해서 데이터를 검색하는 쿼리를 구현하면 다음과 같다.

[employee Table 생성]

CREATE TABLE employee (
  id INT PRIMARY KEY AUTO_INCREMENT,
  first_name VARCHAR(50) NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  birth_date DATE,
  hire_date DATE
);

[데이터 삽입]

INSERT INTO employee (first_name, last_name, birth_date, hire)
VALUES ('윤태영', '박', '1920-03-14', '1935-10-01');

[인덱스 생성]

CREATE INDEX idx_employee_last_name
ON employee (last_name);

 

[인덱스 사용]

SELECT * 
FROM employee
WHERE last_name = '박';

 

 

※주의점: 데이터 삽입, 변경이 수시로 일어나면 매번 인덱스를 변경해야 하므로, 성능 저하를 막기 위한 고려가 필요하다. 

 

Reference : 2023 수제비 정보처리기사

https://product.kyobobook.co.kr/detail/S000200275590

 

2023 수제비 정보처리기사 필기 1권+2권 합본 세트 | NCS 정보처리기술사 연구회 - 교보문고

2023 수제비 정보처리기사 필기 1권+2권 합본 세트 | ㆍ 암기비법 PDF 제공ㆍ 2023년 최신 출제기준 반영!ㆍ 최적의 암기비법(두음쌤)과 학습 Point 수록ㆍ 합격만을 위한 수제비 학습 전략 안내ㆍ 각

product.kyobobook.co.kr

 

'SQL 이론' 카테고리의 다른 글

뷰(View)  (0) 2023.06.05
SQL Joins  (0) 2023.05.17
정규화(Normalization)  (0) 2023.05.16
DBMS의 동시성 제어  (0) 2023.05.16
DataBase Key  (0) 2023.05.16

+ Recent posts