DevBoi

데이터베이스 인덱스란? 본문

[DataBase]

데이터베이스 인덱스란?

HiSmith 2021. 9. 1. 23:56
반응형

데이터베이스의 인덱스란, 추가적인 쓰기작업과 저장공간을 활용하여, 검색 성능을 향상 시키는 방법이다.

full scan을 하지않고, 인덱스를 활용하여 데이터가 존재하는 곳의 위치를 빠르게 찾을수 있다.

 

인덱스를 활용하면, select, update, delete를 빠르게 처리할수있다.

해당 사유는, 해당 작업을 하기 위해 선작업이 되는것이 먼저 select 이기 때문이다.

index는 최신의 정렬상태를 유지해야하기 때문에, insert나, delete, update 작업을 할때,

index가 걸려있는 것이라면, 추가적인 연사을 해준다. (index 재정렬이 필요하기 때문에)

 

일단, 구조를 알기전에 장단점을 알자

 

장점 : 검색속도 향상, 전반적인 시스템 부하를 줄일수있다.

단점 :

인덱스 관리를 위해 db의 10%해당하는 저장 공간이 필요하다.

인덱스 관리하기 위해 추가작업이 필요하다.

인덱스를 잘못 사용하는 경우 오히려 성능이 저하되고, 역효과가 발생한다.

 

인덱스는 규묘가 크고, insert,update,delete가 자주 발생하지 않으며

join,where, order by 에 자주 사용되는 컬럼일수록 효율 성이 크다. 또한 데이터의 중복성이 낮은 컬럼이

많은곳에 두면 유용하다.

 

인덱스의 구조는 해시테이블 , 비트리 구조로 이루어져있다.

 

1. 해시테이블

해시 테이블 구조는 빠른 데이터 검색이 필요할때 유용하다.

해시 테이블 기반의 db인덱스는 데이터 =컬럼의 값, 데이터의 위치를 key,value로 사용하여 컬럼의 값으로 사용한다.

매우 빠른 속도를 지원해주지만, = 에 특화되어있기때문에,

key,value 특성상 부호에 대한 조건 처리는 ex. 나이< 13 , 이런식의 데이터는 조회성능 향상을 맛볼수없다.

실무에서 거의 사용하지 않는 방식이고, 거의 대부분 비트리를 사용한다.

 

2) B Tree 구조의 인덱스 방식

우선 B Tree는 다음과 같은 특징을 가지고있다.

리프노드만 인덱스와 함께 데이터를 가지고 있다.

인덱스 구조는 위와 같이 되어있다.

leaf node에서는 실제 데이터 값만 가지고있고, 위의 논리 노드에서는 자식 노드에 대한 위치만 포인터로 가지고있게 된다.

인덱스는 검색 대상 필드의 값을 기준으로 이미 정렬이 되어있다. 예를 들어서, 5를 찾는 다고 가정해보자,

해당 논리노드에서, 하나씩 검사를 하여, 적절한 range를 탐색한다.

5보다 작을때, 5보다 처음 클때, 그러면 해당 5에 해당하는 range를 찾게 되고,

해당 포인터를 통해,적절 range를 정하여, 탐색한다. 이런 방식 으로 full scan이 아닌, range 스캔을 하는방식으로 

 

즉 비트리 방식으로 인덱스가 동작한다.

이처럼 , 특정 데이터를 찾아야 하면, 루트 블록에서 찾아야하는 데이터의 위치를 브랜치 블록으로 찾고

해당 찾으면 range를 리프블록에서 복사를 해와서, 탐색한다.

반응형

'[DataBase]' 카테고리의 다른 글

[Mariadb] create database error  (0) 2023.09.30
[Database] maraiDb 인코딩 에러 해결  (0) 2023.07.03
AutoCommit?  (0) 2023.05.08
[데이터 베이스] 인덱스 동작과정  (0) 2022.02.16
[DB] 슈퍼타입과 서브 타입  (0) 2022.01.19