개발자 항해
데이터 정의어(DDL) - Index, Synonym 본문
1. Index
- Oracle 서버에서 포인터를 사용하여 행의 검색 속도를 높이기 위해 사용하는 Object
( Index없이 검색하면 처음부터 데이터가 나올때까지 검색하므로 만약 가입한 회원이 자신의 정보를 검색하고자할때
먼저 가입한 회원보다 늦게 가입한 회원이 더 늦게 검색될수있다. )
- Oracle 서버가 자동으로 사용하고 유지 관리한다
- Where 절이나 조인 조건에서 자주 사용되는 컬럼인 경우 인덱스 생성시 성능에 도움이된다
- 테이블이 작거나 자주 갱신되는 컬럼 또는 자주 사용하지 않는 컬럼에는 인덱스 생성을 권장하지 않는다.
1) 인덱스 작동 원리
create index emp_e_id_idx
on employees(e_id); 로 e_id에 인덱스를 부여한다면
아래 와 같이 e_id에 rowid가 순차적으로 부여된다. e_id의 값은 순서대로 들어오기는 하나
값이 일정하게 증가하거나 감소할꺼라는 보장은 없다.
< Employees 테이블 >
rowid(주소같은 개념) | e_id(인덱스 주려는 컬럼) |
AAF123 | 100 |
AAF124 | 101 |
AAF125 | 105 |
AAF126 | 102 |
AAF127 | 104 |
AAF128 | 103 |
오라클이 알아서 트리 구조를 생성한다. 트리 맨 밑바닥부분을 leaf node라고 하며 key값과 rowid로 구성되어있다.
데이터가 모두 같은 선상에 있으므로 (leafnode에 위치) 트리에 먼저들어온 데이터건 끝에 들어온 데이터건 찾는 속도가 같다. 찾으려는 데이터가 들어온다면 오라클은 트리에서 rowid를 갖고가서 테이블가서 찾는다.
만약 많은 데이터가 들어온다면 데이터들이 같은 깊이에 있도록 알아서 조정해서 오라클이 자동으로 트리 만드는데 이를 비트리구조라 한다.
- 그렇다면 컬럼마다 인덱스 다있으면 좋은가?
성능이 좋기는 하나 인덱스 자체도 저장공간을 차지하므로 오히려 비효율적일수도 있다.
- 자주 갱신되는 컬럼에는 왜 잘 안쓰이는가?
오라클이 내부적으로 트리를 자주 바꿔야 되므로 권장되지 않는다.
2) 인덱스 생성
① 자동생성
- Primary key 또는 Unique 제약조건이 정의 된 컬럼에 자동 생성됨
② 수동생성
- 행에 엑세스하는 속도를 높이기 위해 유저가 인덱스를 생성할 수 있음
3) 인덱스 삭제
4) 사용시 유의점
last_name에 index를 주었다.
아래는 결과값은 같지만 함수를 사용안한 last_name에만 걸어놔서
함수를 사용한 lower(last_name)에는 인덱스를 사용안한다.
함수와 자주 쓰인다면 인덱스 생성시 함수와함께 적어줄수있다.
2. Synonym(동의어) - 객체에 다른 이름을 부여해 주는 Object
1) 동의어 생성
2) 동의어 삭제
'DB > Oracle' 카테고리의 다른 글
Data Dictionary - 사용자 관리 (0) | 2022.08.30 |
---|---|
데이터 제어어(DCL)- 유저생성,권한부여 및 회수 (0) | 2022.08.25 |
데이터 역모델링 (0) | 2022.08.19 |
조건부 표현식 (0) | 2022.08.19 |
Data Dictionary 사용 (0) | 2022.08.18 |