인덱스란?

검색연산을 빠르게 하기 위한 Key-Value자료구조이다.

ex)n개의 데이터가 저장되있을때, 특정 값 찾으려면 n개의 데이터 모두를 검색해야한다. 하지만, 값_value을 정렬하여 순서_key를 붙여두면 값을 찾을떄 순서를 이용해 바로 접근해서 모든 데이터를 확인하지 않아도 되므로 빠르다.

 

종류

-B-TREE(트리형태로 key-value를 저장) 

-BITMAP(2차원 배열로 key-value를 저장) 

 

생성과정

전체 테이블 스캔->정렬->Block에 기록

 

1)B-TREE

 

+키,로우

 

 

위를 보면 알 수 있듯이/

-best

칼럼이 추가되도 B-TREE를 저장해뒀으므로 새로 정렬이 일어나지 않으므로/ 실시간 처리에 효율적이다(거진logn)

-worst

하나의 리프블록의 중간값이 입력되면 split이 일어나므로/칼럼 값의 수정이 빈번하지 않은 곳에 쓴다.(trie떄 생각하자..)

 

2)BITMAP

 

 

+함수지원으로 실제 로우주소 몰라도 상대주소로 계산이 가능

+1이 있는 값만 찾으면 된다

+키,로우스타트,로우엔드,비트맵

 

위를 보면 알 수 있듯이/

-best

비트연산을 사용하므로 빠르고 실제 칼럼값을 가지고 있지 않아도 되서 저장공간이 절약되므로/대량의 데이터를 한꺼번에 처리할 때 효율적이다.

-worst

칼럼 하나 추가되면 모든 테이블 바뀌어야므로 효율이 나빠지므로/ 맵의 칼럼 종류 수정이 적은 곳이 좋다.

 

 

 

..흠..이분법적으로 뭐는 시간이 좋고 뭐는 공간이 나쁘다 할 수 있는게 아니라 여로 요소를 생각해야하는구나

 

조회과정

사용자의 요청에 의해 서버프로세스가 메모리의 데이터베이스 버퍼캐시를 본다.

없으면 하드디스크의 데이터파일에서 data블록을 찾아 버퍼 캐시로 복사하고 사용자에게 값을 반환한다.

 

 

 

 

 

 

실습~~

더보기

실습

(https://itholic.github.io/database-index/)

 

인덱스 사용시 주의할 점!(http://www.dbguide.net/db.dbcmd=view&boardUid=13856&boardConfigUid=9&categoryUid=216&boardIdx=80&boardStep=1)

인덱스 선정은 테이블에 접근하는 모 든 경로를 수집하고 수집된 결과를 분석하여 종합적인 판단에 의해 결정하는 것이 바람직하다.

 

B-TREE

http://wiki.gurubee.net/pages/viewpage.action?pageId=1507450

 

BITMAP

http://wiki.gurubee.net/pages/viewpage.action?pageId=1507452

'Basic > Database' 카테고리의 다른 글

트랜잭션-동시성제어,회복  (0) 2022.10.03
트랜잭션  (0) 2020.01.30
Issue: 오라클 노트북 두 개에 설치해서 db 공유 (IP의 이해)  (0) 2020.01.02
NoSQL  (0) 2019.12.10
정규화  (0) 2019.12.10

+ Recent posts