Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

인덱스(INDEX)에 대해 본문

Computer Science

인덱스(INDEX)에 대해

ultra_dev 2023. 3. 28. 13:41

1. 인덱스란?

어떤 데이터가 어디에 있는지

위치 정보를 가진 주소록

 

테이블의 데이터는 순서 없이 쌓이게 되므로 특정 조건의 데이터를 찾으려면 테이블의 모든 데이터에 접근하여 비교하는 과정이 필요(full table scan)

 

하지만 인덱스가 있는 경우 search-key가 정렬되어 있기 때문에 조건 검색 시 속도가 빠름.

(특정 컬럼을 'search-key', 실제 데이터의 물리적 위치 값을 'pointer'라고 함)

 

만약 대량의 데이터를 가지고 있고 select ~ where 같은 특정 조건의 데이터를 찾을 때, 인덱스를 활용하여 빠르게 데이터를 가져올 수 있음. 반대로 데이터의 양이 많지 않다면 굳이 인덱스를 사용할 이유가 없어짐

 

테이블의 특정 컬럼에 인덱스를 생성하면 , 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장. 이때 key, value의 한 쌍으로 저장하게 되는데, 인덱스는 이를 이용해서 빠르게 데이터를 검색할 수 있음

 

인덱스가 생성 되었다면 생성한 인덱스의 컬럼을 Where 조건으로 쿼리하면 옵티마이저에서 판단하여 생성된 인덱스를 타게 됨. 그러면 인덱스에 저장되어 있는 데이터의 물리적 주소로 가서 데이터를 가져오게 됨


즉, 인덱스는 데이터 베이스 테이블에 대한 검색 속도를 향상시켜주는 자료구조의 종류

이로 인해 시스템의 전반적인 부하를 줄일 수 있으며, 조건에 맞는 데이터를 빠르게 찾을 수 있는 장점이 있음


하지만 추가적인 저장 공간이 필요하고(보통 테이블 크기의 10%정도), 인덱스를 관리하기 위한 추가 작업이 필요

뿐만아니라 잘못 사용하면 오히려 검색의 성능 저하를 야기할 수 있음


인덱스의 장점

  • 인덱스의 장점은 빠른 검색 속도 향상

인덱스의 단점

  • 인덱스의 단점은 추가 저장공간이 필요.(약 10%)
  • insert, update, delete 등의 변동 사항이 있는 경우 성능이 저하.
    왜냐하면 데이터 변경 시 인덱스도 수정되어 추가 비용이 발생하기 때문.

 

따라서

  • 데이터의 검색보다 수정, 삭제, 삽입 작업이 빈번한 테이블에는 인덱스를 생성하지 않는 것이 좋다.
  • 테이블 건수가 적다면 인덱스를 경유하기 보다는 테이블 전체를 스캔하는 것이 더 빠르므로, 인덱스 생성을 지양한다.

+ 인덱스를 어느 컬럼에 사용하는 것이 좋을까?

인덱스는 where 절에서 ‘자주 조회’하고 ‘수정 빈도’가 낮으며 ‘데이터 중복’이 적은 컬럼을 선택하는 것이 좋다.

join 조건으로 자주 사용되는 컬럼도 인덱스로 사용하면 좋다.

데이터의 양이 많을수록 인덱스 성능 향상이 커진다.

 

단, 한 테이블에 인덱스가 너무 많으면 데이터 수정 시 소요시간이 커진다. 

또한 성별처럼 데이터 중복이 높은 값은 인덱스를 생성하지 않는 것이 크게 의미가 없다.

왜냐하면 인덱스의 이점보다 추가 저장공간이나 데이터 수정에 대한 성능 저하가 더 크기 때문

 

 

 

****

pk에는 인덱스가 걸려있으니 pk끼리 조인하는 방법으로 활용! 

 

'Computer Science' 카테고리의 다른 글

제네릭이란  (0) 2023.03.29
MSA(Micro Service Architecture)  (0) 2023.03.29
DI(Dependency Injection) 의존 관계 주입  (0) 2023.03.28
REST API  (0) 2023.03.27
객체지향프로그래밍(Object-Oriented-Programming)  (0) 2023.03.27
Comments