인덱스란?
검색연산을 빠르게 하기 위한 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 |