C. Oracle
oracle 인덱스 INDEX
sfeg
2018. 1. 18. 21:26
인덱스(INDEX) => 색인과 같음, 빨리 select를 위해 존재
ex) select deptno ,rowid, rownum from dept;
-> rowid: row의 고유한 주소(6자3자6자3자 끈어서..), rownum: row의 순번
1. index
.테이블 구성은 다음과 같다. 그래서 select시 다음을 참고하여 select한다.
- index
- 가나다...
- 특정 column의 value
- ROWID
. index구성은 다음과 같다.
- 특정 column의 value
- ROWID
. sql구문중에 가장 빠른 구문이 rowid 검색이다.
ex) select deptno,rowid from dept where rowid='AAAHZpAABAAAMUaAAV';
2. index를 만들기
.인덱스를 많이 만들면 DML의 속도는 저하된다. 그러므로 자주사용하는것만 한정적으로 만든다.
. index 만들면 좋은경우
=> 테이블과 ROW가 큰경우, where조건을 자주 사용하는경우, JOIN조건으로 자주 사용하는경우,
=> 테이블과 ROW가 큰경우, where조건을 자주 사용하는경우, JOIN조건으로 자주 사용하는경우,
NULL을 포함하는경우(index에서는 null에대한 정보는 저장하지 않는다.),데이타의 분포도가
고른경우
고른경우
index 만들면 안좋은경우
=> 테이블이 작은경우, where조건사용 안하는경우,join조건을 사용안하는경우
=> 테이블이 작은경우, where조건사용 안하는경우,join조건을 사용안하는경우
.자동으로 만드는경우
=> PK, UK
=> PK, UK
=> pk,uk제약을 지우면 자동으로 삭제된다.
수동으로 만드는 경우
create index 인덱스명
on 테이블명(컬럼명);
ex) create index idx_emp_ename on emp(ename);
3. index삭제: 단, 자동으로 만든 index는 임의적으로 삭제할수 없다.
drop index 인덱스 이름;
ex) drop index idx_emp_ename;
4. index보기
desc user_indexes
select index_name,index_type from user_indexes;
ps. INDEX_TYPE 중
NORMAL : B*TREE구조 (데이타 베이스에서는 균형잡힌 TREE를 B*TREE라고 한다.)