인덱스 활용 시작하기 (1)
인덱스(Index)란 무엇인가?
- 인덱스는 데이터베이스 테이블의 검색 속도를 향상시키기 위해 사용되는 자료구조이다. 특정 컬럼에 대한 데이터와 해당 레코드의 위치 정보를 저장하여, 빠른 데이터 접근을 가능하게 한다.
- 인덱스를 사용하면 전체 테이블을 스캔하지 않고도 원하는 데이터를 빠르게 찾을 수 있어, 대용량 데이터베이스에서 특히 유용하다.
- DBMS의 인덱스는 정렬 상태를 유지하여 빠른 검색을 제공하지만, 데이터 변경 시 성능이 저하된다. 인덱스는 읽기 속도를 높이는 대신 저장 성능을 희생한다. 그러나 과도한 인덱스 생성은 저장 성능 저하와 인덱스 크기 증가로 역효과를 초래할 수 있다.
인덱스의 특징
-
인덱스
- 이진트리 검색( 뒤에서 살펴볼 인덱스 종류 )을 위해서는 미리 데이터가 정렬되어 있어야 합니다.
- 하지만 데이터가 항상 정렬되어 있기란 어렵기 때문에, 특정 컬럼을 기준으로 이진트리를 생성하는 새로운 테이블을 생성하여 미리 정렬된 상태를 만들어야 합니다.
- MySQL에서는 테이블을 생성할 때 특정 컬럼을 PK로 설정하면, 그 컬럼에 대한 인덱스 테이블을 자동으로 만듭니다. → 클러스터링 인덱스

- 인덱스 테이블은 일반 테이블과 같이 데이터베이스 객체입니다.
- 인덱스 테이블만으로는 아무런 기능을 할 수 없기 때문에 다른 테이블에 의존적입니다.
-
단점
- 자원
- 인덱스 테이블이라는 테이블이 생성되므로 메모리를 많이 소비하게 됩니다.
- 따라서 PK 같은 컬럼들을 인덱싱 하도록 하고, 많은 컬럼을 인덱스로 사용하지 않도록 남용하지 않는 것이 좋습니다.
- SELECT를 제외한 INSERT, UPDATE, DELETE에 대한 성능 저하
- 어떤 테이블에 데이터를 추가할 경우, 이에 관계된 인덱스 테이블에서는 데이터를 정렬해야 하므로 전체적인 성능이 저하됩니다.
인덱스 동작 방식
- 특정 컬럼에 대한 인덱스를 생성하면 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다.
- 인덱스가 생성되면 해당 컬럼에 대한 Where 조건문을 사용하여 쿼리를 날릴 때
옵티마이저에 의해 판단되어
생성된 인덱스를 탈 수 있게 되고, 인덱스에 저장되어 있는 데이터의 물리적 주소로 가서 데이터를 가져오는 방식으로 동작하여 검색 속도의 향상을 가져올 수 있는 것이다.

인덱스 자료구조
- B-Tree 인덱스 알고리즘
- 일반적으로 사용되는 인덱스 알고리즘은 B+-Tree 알고리즘이다. B+-Tree 인덱스는 칼럼의 값을 변형하지 않고(사실 값의 앞부분만 잘라서 관리한다.), 원래의 값을 이용해 인덱싱하는 알고리즘이다.
- Hash 인덱스 알고리즘
- 칼럼의 값으로 해시 값을 계산해서 인덱싱하는 알고리즘으로 매우 빠른 검색을 지원한다. 하지만 값을 변형해서 인덱싱하므로, 특정 문자로 시작하는 값으로 검색을 하는 전방 일치와 같이 값의 일부만으로 검색하고자 할 때는 해시 인덱스를 사용할 수 없다. 주로 메모리 기반의 데이터베이스에서 많이 사용한다.
- 왜 index 를 생성하는데 b-tree 를 사용하는가?
- 데이터에 접근하는 시간복잡도가 O(1)인 hash table 이 더 효율적일 것 같은데? SELECT 질의의 조건에는 부등호(<>) 연산도 포함이 된다. hash table 을 사용하게 된다면 등호(=) 연산이 아닌 부등호 연산의 경우에 문제가 발생한다. 동등 연산(=)에 특화된
hashtable
은 데이터베이스의 자료구조로 적합하지 않다.
- 그 밖의 인덱스
- 풀 텍스트 인덱스 ( Full Text Index ) -
- "ㅇㅇ"단어를 포함한 행을 검색하고 싶을 때 사용합니다.
- B+트리는 LIKE 검색으로 중간일치, 후방일치 검색을 할 수 없지만, 전문검색 인덱스 방법으로는 가능합니다.
- 형태 분석법, N 그램을 통해 단어를 구분합니다.
- R 트리 인덱스 ( 공간 인덱스 ) -
- 최소 경계 사각형( MBR, Minimum Bounding Rectangle )이라는 개념을 사용해 인덱스를 구성합니다.
- MBR이란 어떤 도형을 둘러싼 최소의 직사각형을 의미합니다.
- 2차원의 데이터를 인덱싱하고 검색하려는 목적으로 사용되며, GPS( 위도, 경도 ) 같은 공간 검색에 활용됩니다.