티스토리 뷰

Index


 

테이블에 저장된 행의 검색 속도를 높일 수 있는(원하는 행으로 바로 갈 수 있다) 트리 구조의 오브젝트

- 리프노드(가장 하단의 노드)에 각 행을 바로 접근할 수 있는 포인터가 있다.

- DBMS에서 자동으로 사용하고 유지 관리도 해줘서 관리가 편하다.

- 안 써도 상관 없지만 있으면 성능을 향상시킨다. 

 

사용방법 : X
정의방법 : CREATE INDEX 인덱스명 ON 테이블(컬럼명), ALTER index, DROP index

 

WHERE 절 / JOIN 조건 / 규모가 작은 테이블에 쓰기엔 굳이..?

자주 쓰지 않는 컬럼에 인덱스를 만들면 공간낭비이기 때문 => 자주 쓰는 컬럼에 만들자!

중복 가능성 있는 이름 같은 컬럼보다는 사번, 주민번호 같은 곳에서 사용하는 게 좋다.

 

인덱스 생성

- 자동생성 : PK / UK 제약조건이 걸린 컬럼에 자동 생성(만들 필요 없다!)

- 수동생성 : 행에 액세스하는 속도를 높이기 위해 유저가 인덱스를 생성

 

employees(last_name)에 emp_lname_idx라는 이름의 인덱스 생성

CREATE INDEX emp_lname_idx
ON employees(last_name);

 

인덱스가 없는 컬럼일 경우,

인덱스가 유무를 확인하기 위해 Oracle은 Full Table Scan한 후 결과를 보여준다. => 검색 속도차가 난다. 

 

인덱스가 있는 경우, 인덱스가 값을 찾는 과정

1. 모든 테이블의 제일 앞에는 rowid 컬럼이 자동으로 생성되는데

각 행들의 고유한 주소(포인터 정보, 각 행을 직통으로 찾을 수 있음)가 저장되어있다.

2. 인덱스 생성 시 트리구조가 생성되고

리프노드에는 키 값(e_id)과 rowid가 저장된다(키 값을 기준으로 오름차순 정렬되어있다)

3. 인덱스는 B트리 구조로 깊이가 같고 중간분기를 거치는 수가 똑같기 때문에 검색 속도가 동일하다(성능 향상)

** B트리 구조 : 하위레벨이 동일한 구조

 

 

last_name에 인덱스를 걸었을 경우, 

같은 결과물이 나오는 쿼리문이라도 아래는 full table scan 방식으로 출력된다.

인덱스는 lower 함수를 포함하지 않았기 때문에, 첫번째 쿼리만 index가 사용되었다.

자주 사용하는 컬럼이 lower 함수가 사용되면 아래 같은 그 함수를 포함한 인덱스를 만들어야 한다.

CREATE INDEX test
ON employees(lower(last_name));

 

 

Synonym


객체에 또다른 이름을 부여해주는 Object

- 한 Object에게 여러 개의 별명을 줄 수도 있다.

 

Synonym 생성

CREATE SYNONYM emps
FOR employees;

DESC emps; 선언 시 DESC employees; 와 같은 결과가 나온다.

 

 

Column Alias와 다른 점?

alias는 일회성이지만 Synonym은 객체이기 때문에 삭제하기 전까지 유효하다.

 

 

'배운 것 기록 > DB' 카테고리의 다른 글

[MySQL] AWS RDS Spring / Workbench 연동  (0) 2022.08.17
[MySQL] AWS RDS 생성 및 설정  (0) 2022.08.16
[Oracle] Object - Sequence  (0) 2022.08.04
[Oracle] Recyclebin / Flashback / Purge  (0) 2022.07.31
[Oracle] Object - Table, View  (0) 2022.07.29
댓글
최근에 올라온 글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함