SQLP

[SQLP] 인덱스 (INDEX)

songsua 2024. 7. 27. 23:25

1. INDEX  ★★★★★★

데이터베이스의 테이블에 있는 데이터를 빠르게 찾기 위한 객체(OBJECT) 이다


 - 객체의 저장 단위는? :  저장 단위는 데이터베이스나 파일 시스템의 구조에 따라 다르지만, 일반적으로 다음과 같은 단위들이 사용된다. - 데이터의 저장단위는 BLOCK 

- BLOCK(블럭) : 데이터 저장의 가장 작은 물리적 단위. 파일 시스템과 데이터베이스 시스템에서 사용되며, 보통 512바이트나 4킬로바이트 크기로 정의.  블럭 보다 큰 단위는 Extent
- Extent (익스텐트)  : 여러 블록이 모여 이루는 더 큰 저장 단위. 이의 집합이 Segment 

- Segment (세그먼트): 여러 익스텐트로 구성된 더 큰 논리적 데이터 구조입니다. 세그먼트는 주로 데이터베이스 관리 시스템(DBMS)에서 사용되며, 테이블, 인덱스, 임시 공간 등과 같은 데이터베이스 객체를 저장하는 데 사용

- Tablespace (테이블스페이스): 여러 세그먼트를 포함하는 데이터베이스 저장 구조의 논리적 단위. 데이터베이스 전체의 저장소를 관리하고, 여러 세그먼트를 그룹화하여 효율적인 저장 관리

 

1 ) 인덱스 생성

create index idx_orders_row_id
on orders(row_id);	
  
  
select * from user_indexes  ##인덱스 조회
----
PK_DEPT	NORMAL
PK_EMP	NORMAL
IDX_ORDERS_ROW_ID	NORMAL

 

 

2) B*tree INDEX ★★★★

 

- 브랜치 블록의 각 로우는 하위 블록에 대한 주소값을 가지고 있다.

- 각 로우의 키 값은 하위 블록이 갖는 값의 범위를 의미한다.
- 리프 블록의 각 로우는 테이블 로우에 대한 주소값을 갖는다 
- 리프 블록의 각 로우의 키값과 테이블 로우의 키 값은 서로 일치하고 1대1 관계이다.

- 리프 블록의 row_id 값으로 테이블로 가는 과정을. Table access by index row_id; 라고 한다.
- 리프 블록의 row_id 값으로 테이블 access 하는 과정은 Random access 로 실행하는데, 이로 인해 index를 사용해도 성능이 저하될 수 있다. (Random access 을 최소화하는 걸로 실기 문제에 자주 출제댐)

 

3) Bitmap index 구조

선택도가 매우 높은 경우 사용되는 인덱스 (= NDV가 낮다.)
칼럼 값의 범위를 기준으로 나누는 것이 아니라, rowid의 범위에 따라서 정보를 검색한다.
값의 종류가 적고 중복되는 데이터가 많을 때에는 BITMAP 인덱스를 사용한다.

- B*tree는 인덱스보다 큰 데이터를 다룰 때 좋으며, 인덱스 차지하는 공간도 적다.

- Null 에 대한 인덱스 처리도 가능하다

- 여러 테이블 조인에 유리하다.
참고: https://m.blog.naver.com/karoda2/221319941180

 

Oracle DB - BITMAP Index(비트맵 인덱스) 정리

전 포스트에서 본 B-Tree 인덱스는 데이터 값의 종류(Cardinality)가 많고 동일한 데이터가 적을 경우 ...

blog.naver.com

 

 

'SQLP' 카테고리의 다른 글

[SQLP] 옵티마이저 연산  (0) 2024.08.04
[SQLP] 테이블 & 인덱스 액세스  (0) 2024.08.01
[SQLP] Hint 실습  (0) 2024.07.27
[SQLP] Hint  (1) 2024.07.26
[SQLP] 실행 계획 (Execution plan)  (0) 2024.07.22