donchanee

Database Index - 인덱스란? 본문

프로그래밍

Database Index - 인덱스란?

donchanee 2020. 11. 18. 17:25
728x90

인덱스 (데이터베이스)

인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다. 인덱스는 테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있다. 고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다. 인덱스를 저장하는 데 필요한 디스크 공간은 보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다. (왜냐하면 보통 인덱스는 키-필드만 갖고 있고, 테이블의 다른 세부 항목들은 갖고 있지 않기 때문이다.) 관계형 데이터베이스에서는 인덱스는 테이블 부분에 대한 하나의 사본이다.

인덱스는 고유 제약 조건을 실현하기 위해서도 사용된다. 고유 인덱스는 중복된 항목이 등록되는 것을 금지하기 때문에 인덱스의 대상인 테이블에서 고유성이 보장된다.

 

라고 위키피디아에 쓰여있습니다.


인덱스는 간단하게 성능을 위해 사용하는 검색기능 이라고 합니다. ( 일종의 목차 )

 

데이터를 검색할 때에 미리 인덱스테이블을 만들어두고, 인덱스에 접근함으로써 데이터를 찾는 갯수가 전체에서 일부로

줄어들기 때문에 검색이 훨씬 용이하다고 합니다. B-tree 알고리즘을 일반적으로 활용한다고 합니다. 또한 기본적으로 인덱스 테이블은 바이너리 트리 서치를 사용하기 때문에 정렬되어 있다고 합니다. 데이터가 자주 추가되면 될수록 성능의 저하가 예상됩니다.

 


B-tree 들어본적은 있지만 무슨 알고리즘인가요?

전산학에서 B-트리는 데이터베이스와 파일 시스템에서 널리 사용되는 트리 자료구조의 일종으로, 이진 트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조입니다.

 

이진 트리가 자식 노드가 최대 2개인 노드를 말하는 것이라면 B-Tree는 자식 노드의 개수가 2개 이상인 트리를 말합니다. 또한 노드내의 데이터가 1개 이상일수가 있습니다. 노드내 최대 데이터 수가 2개라면 2차 B-Tree, 3개라면 3차 B-Tree 라고 말합니다. ‘1, 2, 3, … M차 B-Tree 라고 합니다. 차수가 홀수인지 짝수인지에 따라 알고리즘이 많이 달라집니다.


인덱스는 "검색"에 최적화된 기능이기 때문에, 무분별한 사용은 오히려 성능의 저하를 일으킬 수 있다고 합니다.

 

예를 들어, 배민같은 서비스에서 음식점을 검색하는 기능이 주로 이루어지기 때문에 인덱스테이블을 사용하면 검색시간을 효과적으로 줄일 수 있겠지만, 페이스북 같은 서비스에서는 사용자들이 데이터를 자주 추가하기 때문에 정렬시간이 오히려 검색시간보다 많이 걸릴 수 있겠습니다.


사용법

CREATE INDEX 인덱스명칭 ON 테이블명 (컬럼명1 ASC | DESC, 컬럼명, ......);

E.g.

select * from ORDER_INFO where ORDER_DATE between '20181201' and '20181231'

​같은 쿼리에서는

 

CREATE INDEX ORDER_DATE_ORDER_INFO ON ORDER_INFO

(

ORDER_DATE ASC

)

이렇게 인덱스를 생성하고,

 

select * from ORDER_INFO where ORDER_DATE PRODUCT = '컴퓨터' and ORDER_DATE between '20181201' and '20181231'

위와 같이 PRODUCT 와 ORDER_DATE 가 AND 로 연결되어 자주 사용된다면

 

CREATE INDEX PRODUCT_ORDER_DATE_ORDER_INFO ON ORDER_INFO

(

PRODUCT ASC, ORDER_DATE ASC

)

이와 같이 인덱스를 생성해볼 수 있다고 합니다.


참고:

brunch.co.kr/@skeks463/25

 

[DataBase] DB 성능을 위한 Index

검색 성능 최적화 | Index 란? 나는 현재 노션을 적극 활용해 내가 공부하는 내용 정리를 많이 하는 편이다. 그리고 작성 때마다 항상 위와 같이 content 별로 바로 찾아서 갈 수 있도록 보여주는 색

brunch.co.kr

m.blog.naver.com/PostView.nhn?blogId=harry5313&logNo=221429300178&proxyReferer=https:%2F%2Fwww.google.com%2F

 

데이터베이스 초보자를 위한 MS SQL INDEX (인덱스)사용법

이글은 데이터베이스 초보자를 위한 글이며 잘못된 내용이 있을수도 있습니다.댓클 달아 주시면 정중히 한 ...

blog.naver.com

 

'프로그래밍' 카테고리의 다른 글

CSS Flex 와 Grid  (0) 2020.11.18
Ruby on Rails  (0) 2020.11.03
Rest API, GraphQL  (0) 2020.11.01
Agile, Scrum, Jira  (0) 2020.11.01