호비시의 끄적끄적

Index ? 본문

DB

Index ?

호비시 2022. 7. 4. 20:54

Index 란?

Index 란 단어로는 색인, 풀어서 설명하면 RDBMS에서 검색속도를 높이기 위한 하나의 기술이다. 특정 TABLE의 컬럼을 Index로 설정해두면, 검색 시 해당 TABLE의 레코드를 전체 스캔하는 것이 아니라 색인화 되어있는 Index 파일을 검색하여 속도를 빠르게 한다. Index 파일에는 Index 와 data가 들어가 있다. Index를 사용하기 위해선 항상 정렬된 상태를 유지해야 하기 때문에, 원하는 데이터를 찾는데는 빠르지만 새로운 값이 추가되거나, 수정, 삭제의 경우 쿼리문의 실행 속도가 느려진다.

Index의 자료구조

  1. B+ Tree

기존의 B- Tree는 특정 데이터의 검색은 효율적이지만, 모든 데이터를 한 번 순회하는 데에는 모든 노드를 방문해야 하므로 비효율적이다. 이런 단점을 개선시킨 B+ Tree 알고리즘을 RDBMS에서 일반적으로 사용하고 있다. ORACLE이나 MSSQL에서는 여러종류의 TREE를 선택하여 사용할 수 있다고 한다.

https://iq.opengenus.org/content/images/2018/06/b--search.jpg

B+ Tree 구조는 크게 3개로 이루어져있다.

  • Root Node : 경로의 시작, 출발점 노드
  • Leaf Node : 실제 데이터가 저장되는 노드
  • Branch Node : 리프 노드까지의 경로 역할을 하는 노드

장점으로는 leaf node를 제외하고는 데이터를 저장하기 않기 때문에 많은 메모리를 확보할 수 있다. 따라서 하나의 node에 더 많은 포인터를 가질 수 있기 때문에 트리의 높이가 낮아지고 검색속도를 높일 수 있다. 하지만 특정 key에 접근하기 위해서는 leaf node까지 가야한다는 단점이 있다.

  1. Hash Table

해시 테이블은 key와 value를 한 쌍으로 데이터를 저장하는 자료구조이다. 해시 테이블을 사용한다면 Index를 (key, value) = (컬럼의 값, 데이터의 주소)로 구현하는데, 실제론 잘 사용되지 않는다. 그 이유는 해시 테이블은 등호에만 최적화 되어있기 때문이다. DB에서는 부등호 연산이 주로 사용되는데 해시 테이블 내의 데이터들은 정렬되어 있지 않으므로 특정 기준보다 크거나 작은 값을 빠른 시간내에 찾을 수 없다.

Index를 사용할 때 고려해야할 사항

SELECT 쿼리의 성능을 향상시키기 위해 INDEX를 사용한다. 그렇다면 모든 컬럼에 index를 사용하면 속도가 향상될까? 절대 그렇지 않다. index를 사용하게 되면 select는 빠르게 실행되도, insert, update, delete를 실행 할 때 속도가 매우 떨어진다. 그렇기 때문에 추가, 삭제, 수정이 잦은 table에 설정하기 보다는 정적인 table, 조회가 자주 일어나는 table에 사용하면 INDEX의 장점만 사용할 수 있다.

Comments