데이터베이스 인덱스

Hyeok_kiki·2021년 9월 1일
0

데이터베이스

목록 보기
2/2

인덱스(Index) : Insert(쓰기) 작업과 저장 공간을 활용하여 쿼리의 검색 연산속도를 향상시키이 위한 자료구조.

사용이유: 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기에 데이터 + 위치를 포함한 자료구조를 생성하여 빠르게 조회 할수 있다.

ex) 일반 책에서의 목차 개념과 비슷하게 생각할 수 있다.

img

인덱스의 장점
  1. 테이블을 조회하는 속도와 검색 연산의 성능이 향상된다.
  2. 시스템 부하를 줄일수 있다.
인덱스의 단점
  1. 인덱스가 잘못 사용되거나 많을 경우 오히려 성능이 저하될수 있다.
  2. 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
  3. 인덱스를 별도로 관리해야 하는 추가 작업이 발생.
인덱스의 종류
  1. 단일 인덱스 : 인덱스가 한개의 컬럼으로 만 구성되어 있는 인덱스

    img

위 이미지와 같이 한개의 컬럼으로 구성된 인덱스이다.

단일 인덱스 생성 방법
CREATE INDEX ['인덱스이름']  ON '테이블이름'('컬럼명');

​ 위와 같이 인덱스를 생성하고 사용할수 있습니다.

​ 인덱스를 타는지 혹은 타지 않는지 확인을 하고 싶다면 EXPLAIN 명령어를 통해 쿼리의 실행 계획을 확인할수 있다.

EXPLAIN SELECT * FROM WHERE '인덱스 적용 컬럼' = '값'

위와 같이 인덱스가 정상적으로 작동한다면 위와 같은 결과가 나옵니다.

index는 where절에서 비교전 인덱스에 가공이 일어난다면 타지 않는다. ( 가공하기 전 데이터로 인덱스를 구성하였기 때문)

  1. 복합 인덱스 : 2개 이상의 컬럼으로 구성되어 있는 인덱스
복합 인덱스 생성방법
	CREATE INDEX ['인덱스 이름'] ON '테이블이름'('선두컬럼','컬럼')

인덱스를 타는지 혹은 타지 않는지 확인 방법은 위와 같다.

복합인덱스의 경우 선두컬럼이 먼저 조건으로 걸리지 않는다면 인덱스를 타지 않으므로 만들기 전에 충분히

고려를 하고 생성하는것 이 좋다.

EX)

CREATE INDEX IDX_TEST ON TEST(NAME,GENDER,JOB);

위와 같은 복합 인덱스를 생성했다고 가정한다면

SELECT * FROM TEST WHERE GENDER = '남' AND JOB = 'DBA'

와 같이 검색을 진행한다면 선두컬럼 NAME 이 없으므로 인덱스를 타지 않는다 아래의 경우는 인덱스를 타는 경우이다.

SELECT * FROM TEST WHERE NAME = '홍길동' AND JOB = 'DBA';
SELECT * FROM TEST WHERE NAME = '홍길동';
SELECT * FROM TEST WHERE NAME = '홍길동' AND GENDER = '남'
SELECT * FROM TEST WHERE NAME ='홍길동' AND GENDER = '남', AND JOB = 'DBA'

선두컬럼 조건이 반드시 앞에 나와야 한다는 조건이 있다.

인덱스 생성시 준수하면 좋은점
  1. 값의 변화가 많은 데이터를 인덱스로 잡는것이 유리하다.
  2. 인덱스로 나뉘어진 결과의 범위가 넓을경우 인덱스를 타더라도 FULL SCAN 을 돌게되므로 주의해야한다.

위 글에 대하여 잘못된 부분이나 추가로 했으면 좋겠는 부분은 댓글로 남겨주세요!!

출처

0개의 댓글

관련 채용 정보