본문 바로가기
Knowledge/CS

[CS] 인덱스(Index) 란?

by YoonJong 2022. 12. 4.
728x90

데이터베이스에서 인덱스를 사용하는 이유는 검색 기능을 향상 시키기 위함입니다.

 

실생활에서 책에 있는 목차 라고 생각할 수 있습니다.

책에서 원하는 카테고리 및 정보를 페이지 번호를 확인해 찾아가듯이, 원하는 데이터를 먼저 찾고 저장되어 있는 주소로 찾아갑니다.

 

인덱스의 설정기준은 어떤것이 좋을까요?

설정기준은 cardinality(카디널리티)가 큰것을 사용합니다.카디널리티는 고유값이 많은 것이라고 이해했습니다. 쉽게 말하면, 엑셀에서 필터를 걸었을 때 보기의 수가 많은 것입니다.예로 아래의 표를 보면 주민등록번호가 설정기준이 됩니다.

팀이름 닉네임 주민번호
A팀 홍길동 111112-1
A팀 둘리 111113-1
A팀 홍길동 111114-1
B팀 나길동 111115-1
B팀 다길동 111116-1
B팀 둘리 111117-1

테이블명이 team 이라고 했을 때 인덱스를 생성하려면 아래와 같이 생성하면 됩니다.create index team_number on team ('주민번호');create index {인덱스이름} on {테이블이름} ({설정컬럼명});

 

인덱스의 큰 장점은 데이터들이 정렬이 되어 있어 검색 조건에서 빠르다는 것입니다.

테이블이 생기고 데이터가 저장되면 기준없이 저장되어 where 절을 실행할 때 처음부터 끝까지 확인해가면서 값을 찾아야 하는데, 인덱스 테이블은 데이터들이 정렬이 되어 있어 해당 조건의 값을 더욱 빠르게 찾을 수 있다.

 

인덱스의 단점은 인덱스를 관리하기 위해 데이터베이스의 저장공간을 추가로 사용해야 한다는 것과,

추가, 수정, 삭제 등 연산시에 인덱스를 형성하기 위한 추가적인 비용이 들기 때문에, select 를 사용하는 검색에서만 사용하는것을 지향합니다.

 

인덱스에서는 보통 B-tree ( Balance Tree ) 를 사용합니다. 이진트리형태와 비슷하며 약간의 변형을 준 형태입니다. 자세한 내용은 바로 아래 영상에서 확인하면 좋을 거 같습니다.

 

https://www.youtube.com/watch?v=J7_J0xgt8WQ 

 


인덱스의 종류로는 클러스터 인덱스non-클러스터 인덱스가 있다.

https://velog.io/@sweet_sumin/%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%93%9C-%EC%9D%B8%EB%8D%B1%EC%8A%A4-Clustered-Index-%EB%84%8C-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%93%9C-%EC%9D%B8%EB%8D%B1%EC%8A%A4-Non-Clustered-Index

 

 

https://www.youtube.com/watch?v=9ZXIoh9PtwY 

 

 

728x90

댓글