군침이 싹 도는 코딩

DB 데이터베이스 인덱스(Index) 기본 개념과 설명 본문

Database/MySQL

DB 데이터베이스 인덱스(Index) 기본 개념과 설명

mugoori 2023. 3. 31. 10:17

인덱스(Index)란?

Index는 RDBMS ( 관계형 데이터베이스 관리 시스템 ) 에서 테이블에 대한 검색속도를 높여주는 자료 구조를 말하며 테이블내에 1개 또는 다수의 컬럼을 이용해 생성 가능합니다.

인덱스를 적용하지 않은 컬럼의 경우 검색을 할때 레코드를 처음부터 끝까지 다 읽으면서 검색 조건과 맞는지 비교해서 찾는데 이것을 'Full Table Scan' 이라고 한다 'Full Table Scan' 은 가장 느린 Scan 방법이며 전체 데이터를 읽는 과정에서 많은 자원을 소모하게 된다.

특정 테이블의 컬럼을 인덱싱 ( Indexing ) 하면 검색을 할 때 테이블 레코드를 전부 확인하는게 아닌 인덱싱 되어 있는 자료 구조를 통해서 검색되기 때문에 검색 속도가 빨라진다

흔히 우리가 보는 책의 '목차'와 비슷하다고 생각하면 된다

 

###

인덱스에는 여러가지 유형이 있지만 그중에서 많이 사용되는 인덱스 구조는 B+TREE 구조이다

( B+TREE, B*TREE는 B-TREE의 확장 개념이다 )

 

B-TREE 알고리즘

컬럼의 값을 변경하지 않은 채로 사용하는 인덱스 알고리즘으로 가장 범용적으로 쓰이는 인덱스 알고리즘이지만 

Insert, update, delete에는 비효율적이다.

 

인덱스의 단점

인덱스는 검색 속도를 향상시킨다는 장점을 가지고 있지만 항상 정렬상태를 유지하기때문에

Insert, update, delete 과정에서는 상대적으로 속도가 저하된다

TABLE 의 Index 정보를 갱신하는 비용이 추가되기 때문이다

 

insert : 새로운 데이터에 대한 인덱스가 추가된다

update : 기존 인덱스를 제거하고, 갱싱된 데이터에 대해 인덱스를 추가한다

delete : 삭제하는 데이터의 인덱스를 제거한다

 

>> 즉 , 데이터 갱신보다는 조회에 주로 사용되는 컬럼에 Index를 지정해주는것이 좋다

 

Cardinality

Cardinality가 낮은 컬럼을 우선적으로 인덱싱하는것이 검색 성능에 유리하다

Cardinality란 특정 데이터 집합의 유니크 ( Unique )한 값의 개수를 의미한다 

예를 들어 gender 라는 컬럼과 title이라는 컬럼이 있을때 gender의 경우 남 / 여 밖에 없기때문에

Cardinality 가 상당히 높다고 할 수 있다 따라서 두 컬럼에 인덱스를 지정해줄때에는 title 을 먼저 지정해주면

검색 성능에 유리하다. 이 외에도 여러가지 조건을 고려하여 인덱스를 설정하면 더욱 좋은 결과를 얻을 수 있다.