나정이의 공부/IT

해시(Hash) 인덱스 정리

나정_ 2021. 6. 24. 08:41
728x90
반응형

해시(Hash) 인덱스 

 

 

먼저 해시(Hash)인덱스에 대해 알기 전에 인덱스(index)에 대하여 알아보도록 하자. 

인덱스란, 간단하게 말해 빠른 검색을 하기위해 사용하는 독립된 객체로 이 말이 이해하기 어렵다면 예시로 기억하는 편이 좋다. 

 

일반적으로 많이 사용하는 예시로 사전을 들 수가 있다. 

테이블이 책이라고 할 때 원하는 내용을 찾기 위해 사전을 처음부터 끝까지 훓는 경우도 많지만  

빠르게 찾기 위해서 맨뒷 페이지에 요약되어있는 키(key)값을 보고 페이지를 찾아가는 경우가 다반사이다. 

여기서 요약되어있는 키(key)값이 바로 인덱스(index)가 되는 것이다. 

 

이처럼 인덱스 사용의 가장 큰 이유는 빠른 검색이며, 올바른 인덱스 종류를 선택하여 사용해야 데이터베이스의 효율성을 높일 수 있다.

 

인덱스의 종류는 B-tree, 해시(Hash) 등등 여러가지가 있지만 오늘은 해시(Hash)인덱스에 대하여 배워보도록 하겠다. 


 

 

1. 해시(Hash)인덱스 특징

 

해시(Hash)인덱스는 B-tree만큼 범용적이지 않지만 고유의 특성과 용도를 지닌 인덱스이다.

해시(Hash)인덱스는 일반적인 DBMS에서 메모리 기반의 테이블에 주로 구현되며, 디스크 대용량 테이블 용으로는 거의 사용되지 않는다는 특징을 가지고 있다. 

 

* 메모리 기반 DBMS는 기존 디스크 기반 DBMS(특정 데이터 페이지와 인덱스만 메모리에 상주시킴) 와 달리 디스크에 존재하는 DB전체를 메모리에 상주시킨다. 

 

2. 해시(Hash)인덱스 구조

 

 

해시(Hash)인덱스는 검색하고자하는 값을 주면 해시 함수를 거쳐 찾고자하는 키 값이 포함된 버켓을 찾아낸다 

*버킷이란, 인덱스 각 키값과 레코드의 주소값등의 정보를 두는 공간이다.

그렇게 버켓을 읽어 실제 레코드가 저장된 위치를 찾아내는 방법이다. 

 

3. 해시(Hash)인덱스 장/단점

 

해시(Hash)인덱스의 장점은 해시 인덱스 구조를 보면 이해하기 쉬운 부분인데 앞에서 설명했듯이 해시 함수를 거쳐 찾고자하는 키값을 찾아내는 방식이기 때문에 

1. 실제 저장위치를 빠르게 알 수 있다. 

2. 또한 원래의 키 값을 저장하는 것이 아니라 함수 결과에 대한 값을 저장하기 때문에 컬럼 길이가 아무리 길어도 저장되는 양은 현저히 줄어든다는 장점을 가지고 있다. 

 

그에 반해 단점

함수의 결과 값 범위가 너무 넓어져 버리면 그만큼 많은 버켓을 필요하기 때문에 공간의 낭비가 심해져 장점이 사라져버린다. 

또한, 해쉬함수를 거쳐 변형된 값을 저장하기 때문에 범위를 검색하거나, 원본값 기준으로 정렬할 수 없다. 

 

4. 해시(Hash)인덱스 사용용도

 

변형된 값을 저장하기 때문에 범위를 검색하거나 ( >= , BETWEEN AND, < > ,LIKE), 원본값을 기준으로 정렬(ORDER BY , DESC ...)을 할 수 없는 대신 동등비교조건(==, IN, IS NULL, IS NOT NULL, <==>)일 경우에는 B-tree보다 훨씬 빠른 장점을 이용할 수 있다. 

 

 

728x90
반응형