ROWID
- 레코드 식별자(RID, Record Indentifier / ROWID)
- DB에 존재하는 모든 row가 갖는 유일한 식별자_오라클에서만 존재
- ROWID는 SELECT문을 이용하여 조회 가능, UPDATE, INSERT 불가능
- Oracle에서 INDEX를 생성하기 위해 내부적으로 사용하는 Pseudocloumn으로 사용자가 임의로 변경, 삭제 불가능
- 참조만 가능하며 데이터베이스에 값이 저장되지 않음
- 물리적인 address를 가지고 있기 때문에 Single Block Access로 찾고자 하는 row를 찾을 수 있어 가장 빠른 Access 방법을 제공
- 인덱스 검색 및 테이블검색 없이도 레코드를 찾을 수 있음, 작업 효율 향상
구성(10바이트)
- 오라클 7에서는 6바이트(제한된 ROWID 포맷) : 파일번호, 블럭번호, 행번호 형식(A three-piece Format)
- 오라클 8에서 10바이트(확장 ROWID 포맷) : Object와 Patition의 개념이 도입 - Data Object Number가 추가(A four-piece Format)
- ROWID 형태 : OOOOOOFFFBBBBBBRRR
- OOOOOO(6자리) : DATABASE SEGMENT(디스크를 저장하는 공간)를 식별하기 위한 DATA OBJECT NUMBER를 가진다. 해당 로우가 속해있는 오브젝트 번호
- FFF(3자리) : TABLESPACE에 상대적인 DATAFILE NUMBER, 해당 로우가 속해있는 데이터 파일 번호
- BBBBBB(6자리) : ROW를 포함하는 DATA BLOCK의 NUMBER, 해당 로우가 속해있는 데이터 파일의 데이터 블록 주소값
- RRR(3자리) : BLOCK에서의 ROW의 SLOT, 데이터 블록 내에서 해당 로우의 주소값
- DATAFILE : FILE_NO(데이터베이스의 유일한 절대적인 구성요소)와 RELATIVE_FNO(테이블스페이스에서 유일한 상대적인 구성요소)
- DATA OBJECT NUMBER : 오브젝트(TABLE, VIEW, SEQUENCE, SYNONYM, INDEX 등등)의 고유번호 32bit,
- RELATIVE FILE NUMBER : 각각의 데이터 파일에 할당되는 번호 10bit
- BLOCK NUMBER : 데이터 블록의 위치를 알려주는 22bit
- ROW NUMBER : 오라클 블록의 헤더에 저장된 row direct slot의 위치를 알려주는 고유번호, 16bit, 임의의 로우의 위치를 알려줌
블록
1. 싱글블록 : 테이블읽을 때 index scam - Rowid로 찾아온다. 8kb
2. 멀티블록 : 테이블을 읽은 때 Full Scan 128kb=1MB
3. NL Join : Random 엑세스를 한다. 온라인성 조회일 때 사용, 테이블의 데이터가 많을 때 full scan하면 느려질 수 있음.
4. Random 인덱스 : index scan으로 왔다갔다 하면서를 데이터를 읽는다.
'IT 지식 > DB' 카테고리의 다른 글
[SQL]Join (0) | 2025.04.12 |
---|---|
[SQL] Oracle (0) | 2016.03.18 |
[SQL] Procedure, Function, Package (0) | 2016.01.07 |
[펌]PK 가 없는 테이블에서 중복된 데이터 제거하기 (0) | 2015.12.18 |
[SQL] 제약 조건 (0) | 2015.11.15 |