데이터베이스에서 인덱스를 사용하는 이유는 검색 기능을 향상 시키기 위함입니다.
실생활에서 책에 있는 목차 라고 생각할 수 있습니다.
책에서 원하는 카테고리 및 정보를 페이지 번호를 확인해 찾아가듯이, 원하는 데이터를 먼저 찾고 저장되어 있는 주소로 찾아갑니다.
인덱스의 설정기준은 어떤것이 좋을까요?
설정기준은 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://www.youtube.com/watch?v=9ZXIoh9PtwY
'Knowledge > CS' 카테고리의 다른 글
기술면접 주요질문 - 공개X (0) | 2022.12.09 |
---|---|
[CS] 프로세스의 구조 (0) | 2022.12.06 |
[CS] 객체지향 프로그래밍이란? (0) | 2022.12.03 |
[CS] 뮤텍스(Mutex) 세마포어(Semaphore) 란? (0) | 2022.12.02 |
[CS] HTTP1.1 의 keep alive 란? (0) | 2022.12.01 |
댓글