728x90

INDEX

인덱스란 지정한 컬럼들을 기준으로 메모리 영역에 일종의 목차를 생성하는 것.

예를 들어 책 뒷편에 '색인'이 인덱스의 역할과 동일하다.

insert, update, delete의 성능을 희생하고 대신 select(Query)의 성능을 향상시킨다.

단 update, delete의 성능이 느리지만, 인덱스가 있으면 update, delete를 하기 위해 데이터를 조회하는것은 빠르다.

 

INDEX 장단점

INDEX 장점

  • 검색 속도가 빨라질 수 있다. (모든 상황은 아니다.)
  • 쿼리의 부하가 줄어들어 시스템 전체의 성능이 향상 된다.

INDEX 단점

  • INDEX가 데이터베이스 공간을 차지. 약 10%정도의 추가 공간이 필요.
  • 첫 인덱스 생성시 시간이 많이 소요될 수 있다.
  • 데이터 변경 작업이 자주 일어날 경우 오히려 성능이 저하 될 수 있다.

 

효율적인 INDEX

  • WHERE 절에 자주 등장하는 컬럼을 인덱스로 설정
  • ORDER BY 절에 자주 등장하는 컬럼을 인덱스로 설정
  • SELECT 절에 자주 등장하는 컬럼들을 잘 조합해서 인덱스로 설정
  • JOIN이 자주 사용되는 열에 인덱스를 생성하는 것이 좋다.

 

데이터 중복도

  • 중복도가 낮다 - 분포도가 높다 - Cardinality가 높다 - 나타나는 데이터의 종류가 많다.
  • 중복도가 높다 - 분포도가 낮다 - Cardinality가 낮다 - 나타나는 데이터의 종류가 적다.

 

INDEX 사용시 주의점

  • INDEX를 막 생성하면 SELECT는 빨라지지만 INSERT, UPDATE는 느려진다.
  • WHERE절에 사용되어야 INDEX를 주로 사용한다.
  • INDEX를 자주 사용하지 않으면 성능 저하를 초래할 수 있다.  
  • INDEX의 데이터 중복도가 높으면 성능 저하를 초래할 수 있다. 
  • JOIN절에 자주 사용되는 열에는 INDEX의 효율이 좋다.
  • 사용하지 않는 INDEX는 제거하는 것이 효율적이다. 

 

 

 

728x90

'DataBase' 카테고리의 다른 글

[DataBase] RDBMS, NoSQL 차이점  (0) 2022.04.05
[MySQL] Transaction 트랜잭션 정리  (0) 2022.04.04
[MySQL] NOT LIKE  (0) 2022.02.14
[MySQL] 한글 깨짐 현상 해결 방법  (0) 2022.02.13
[MySQL] EXISTS, NOT EXISTS 사용법  (0) 2022.02.04

+ Recent posts