DB

인덱스

잔망루피 2022. 7. 24. 15:02

인덱스(Index) 

  • 자료를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조
  • B-tree 구조
  • 인덱스는 WHERE 절에 자주 사용되는 속성이어야 한다.
  • 인덱스는 ORDER BY 절에 자주 사용되는 속성이어야 한다.
  • 인덱스는 조인에 자주 사용되는 속성이어야 한다.
  • 조건절이 없다면 인덱스는 사용되지 않는다!
  • 단일 테이블에 인덱스가 많으면 속도가 느려질 수 있다.(테이블 당 4~5개가 적절)
  • 속성이 가공되는 경우 사용하지 않는다.
  • INSERT / UPDATE / DELETE가 자주 발생하지 않는 컬럼
  • 속성의 선택도(1/서로 다른 값의 개수)가 낮을 때 유리하다. (=카디널리티가 높은 것)
  • 데이터의 양이 별로 없거나 데이터 값이 몇 종류 안 되면 인덱스가 없는 게 더 빠를 수 있다.
  • 결합 인덱스는 순서가 중요하다.
  • WHERE 절에서 equal 조건으로 많이 쓰이는 컬럼들이 앞으로 오는게 효율적이다.
  • 또한, 분별력이 높은 컬럼이 앞으로 오는게 효율적이다.
  • 테이블이 가지고 있는 전체 데이터 양의 10~15% 이내의 데이터가 출력이 될때만 인덱스 사용이 효율적

 

카디널리티

  • 요소의 개수
    • ex) 성별은 남, 여로 카디널리티가 2

 

인덱스 종류

Non-clustered Index Clustered Index
실제 데이터와 다른 무리의 별도의 인덱스
인덱스 키 값에는 해당 데이터에 대한 포인터가 존재
테이블에 여러 개의 Non-clustered index가 있을 수 있다.
별도의 인덱스 페이지를 생성해서 추가 공간 필요
unique 제약조건 적용시 자동 생성
직접 index 생성시 생성됨
실제 데이터와 같은 무리의 인덱스
데이터를 인덱스로 지정한 컬럼에 맞춰서 정렬
테이블에 하나의 Clustered index가 있을 수 있다.
primary key 또는 unique + not null에 자동 생성됨

 

 

FullScan

  • 데이터를 처음 ~ 끝까지 모두 스캔해서 데이터 조회
  • 정렬되어 있지 않은 데이터
  • 동일한 데이터의 양이 많은 경우 적합
  • 데이터 규모가 크면 매우 비효율적
  • 적용 가능한 인덱스가 없는 경우
  • 인덱스 처리 범위가 넓은 경우

 

B-Tree(Balanced-Tree)

  • 트리 높이가 같음
  • 자식 노드를 2개 이상 가질 수 있음
  • 기본 데이터베이스 인덱스 구조

 

 

 

 


참고 👇

http://www.tcpschool.com/mysql/mysql_index_create

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

https://www.ibm.com/docs/en/ias?topic=indexes-clustered-non-clustered 

 

 

https://www.youtube.com/watch?v=uO8tL0okg7Q 

 

https://www.saichoiblog.com/mongodb-index/

 

인덱스 개념 완벽하게 이해하기Saichoiblog

인덱스 설정은 DBMS가 데이터에 접근할 때 랜덤 엑세스하기 위해 데이터를 순차적으로 넣는 것을 말한다. 데이터베이스에서 정렬(order by)를 자주하게 되는 필드에 인덱스 설정을 하게 되면 데이

www.saichoiblog.com

 

반응형

'DB' 카테고리의 다른 글

Sharding  (0) 2022.10.17
SQL Injection  (0) 2022.08.30
[Error] ERR wrong number of arguments for 'zrangebyscore' command  (0) 2022.07.23
[ERROR] java.sql.SQLException: Field 'title' doesn't have a default value  (0) 2021.11.21
[MySQL] Error Code : 3780  (0) 2021.11.19