티스토리 뷰

데이터베이스

[DB] 인덱스 개념

sayho 2022. 2. 9. 21:18
인덱스(Index)

  대용량의 데이터에서 테이블을 FULL SCAN 하지않고 특정 데이터를 빠르게 검색하기 위해 사용하는 자료구조이다.

  인덱스는 컬럼과 해당 컬럼의 인덱스 주소를 따로 저장해놓고 사용하여 검색 효율을 높인다. 

  인덱스는 보통 WHERE 절과 함께 사용해야 효과를 볼 수 있다.

테이블 Full Scan

  테이블의 각 행을 순차적으로 읽고, 읽은 열에서 조건의 유효성을 검사한다. 

인덱스(Index) 스캔

  인덱스는 검색하려는 값을 기준으로 정렬되어있다. 인덱스를 사용하면 검색하려는 값을 찾게 되었을 때 더이상

  검색을 진행하지 않는다. 

Full Scan과 인덱스 스캔의 비교
  • kakao_con 학생이 수강하고 있는 강의를 (major 흐린눈 plz) 조회한다고 한다고 가정!! 

  1. Full scan으로 조회하는 경우 : 한 행을 가져오고 STUDENT가 kakao_con 인지 비교를 하고 일치하면 다음 행을 조회한다. 다음 행에도 kakao_con이 나올 수 있기 때문에 테이블의 처음 행부터 끝 행까지 조회하게 된다. 
  2. Index scan으로 조회하는 경우 : Index를 사용하게 되면 일단 Index를 설정할 컬럼을 선택하고, 인덱스는 컬럼을 기준으로 정렬하여 생성된다. 위에서는 STUDENT 컬럼을 기준으로 정렬되어있기 때문에 STUDENT가 kakao_con인 데이터가 마지막으로 저장된 위치인 13 이후에는 나오지 않을 것임을 알기 때문에 Full scan 처럼 더이상 테이블을 조회하지 않아도 된다.

Full scan을 하면 컬럼 13개를 조회하는 반면 인덱스를 사용하여 scan을 하면 위치를 찾고자하는 데이터의 주소를 알고있기 때문에 6개의 컬럼만 조회하면 된다. 

인덱스(Index)의 장점 
  • 테이블의 검색 속도를 향상시킨다.
인덱스(Index)의 단점
  • 인덱스 설계를 잘못하면 검색 성능 저하를 일으킬 수 있다.
  • 인덱스를 위한 저장공간이 필요하다.
어떤 컬럼을 인덱스(Index) 기준으로 선택/사용해야할까? 
  1. 연산보다 조회가 자주되는 테이블 : 데이터의 조회(SELECT)보다 CUD(CREATE/UPDATE/DELETE)가 더 자주 사용되는 테이블이라면 인덱스가 오히려 단점이 될 수 있다. 데이터가 추가되거나 삭제된다면 인덱스가 저장된 공간에 추가된 데이터에 대한 내용을 저장해야 한다. 인덱스가 추가되거나 삭제, 수정될때마다 인덱스를 리빌드 해줘야 한다. 그렇기 때문에 인덱스를 적용하려면 데이터의 CUD보다 조회가 훨씬 자주 사용되는 테이블을 선택해야한다.
  2. 카디널리티(데이터의 고유한 값)가 높은 컬럼 : 카디널리티는 데이터의 고유한 값의 갯수이다. 이름과 성별 컬럼이 있다고 해보자(100개의 row/여자50 남자50). 이름을 인덱스 기준으로 사용하면 동일한 이름의 갯수만큼만 테이블의 row를 조회하면 된다(최악의 경우). 만약 성별을 인덱스 기준으로 사용하면 일단 최악의 경우 50row만큼 조회해야한다. 그렇기 떄문에 중복도가 낮은 컬럼을 인덱스 기준으로 삼아야한다.
  3. 선택도가 낮은 컬럼 : 카디널리티가 높을수록 선택도가 높다. 선택도는 특정 값을 얼만큼 잘 선택할 수 있는지에 대한 지표다. 테이블에 이름과 주민등록번호가 있을 때 주민등록번호는 고유한 값이기 때문에 카디널리티가 이름보다 높다. (5%~10%가 적정하다고 함)
  4. 활용도가 높은 컬럼 : where절에 자주 활용되는 컬럼을 사용한다. 
  5. 중복도가 낮은 컬럼

'데이터베이스' 카테고리의 다른 글

[MySQL] MySQL 아키텍처 (1)  (0) 2022.03.26
[DB] 데이터베이스 JOIN  (0) 2022.03.12
[DB] 데이터베이스 정규화  (0) 2022.03.07
[DB] 인덱스(Index)의 자료구조  (0) 2022.02.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함