9_oracle_INDEX, SYNONYM

study/Oracle · 2019. 11. 27. 08:46

@@@INDEX@@@

- SQL문의 처리 속도를 향상시키기 위해서 컬럼에 대해 생성하는 오라클 객체

@@1. 인덱스 생성 방법

@사용자가 정의한 인덱스를 관리하는 데이터 딕셔너리

SELECT * FROM USER_IND_COLUMNS;

[표현식]

CREATE [UNIQUE] INDEX 인덱스명

ON 테이블(컬럼명, 컬럼명, ... | 함수명, 함수계산식);

인덱스는 위 표현식으로 일일이 생성 가능하지만 PRIMARY KEY, UNIQUE 제약조건 설정 시 자동으로 같이생성됨

@@2. 인덱스 구조

ROWID : DB내 데이터 공유 주소, ROWID를 이용하여 데이터 접근 가능

1 ~ 6 번째 : 데이터 오브젝트 번호

7 ~ 9 번째 : 파일번호

10 ~ 15 번째 : BLOCK 번호

16 ~ 18 번째 : ROW번호

SELECT ROWID, EMP_ID, EMP_NAME

FROM EMPLOYEE;

@@3. INDEX의 원리

인덱스는 MAP 형식으로 구성이 되어 있음

KEY = 지정한 컬럼

VALUE = ROWID

인덱스를 활용한 검색

WHERE절 조건에 인덱스가 부여된 컬럼을 사용함

EX) 

SELECT EMP_ID, EMP_NAME

FROM EMPLOYEE

WHERE EMP_ID = 201;

EMP_ID는 PRIMARY KEY 이므로 INDEX가 자동으로 생성되있음 INDEX가 설정되어 있는 컬럼을

WHERE절로 조건을 활용하면 해당 조건을 만족하는 컬럼을 ★바로 찾아가서 조회하게됨

만약 INDEX가 설정되지 않은 컬럼을 조건으로 하여 검색하면 해당 조건을 만족하는 컬럼을

찾기위해 테이블의 모든 행을 검사하게됨 (FULL SCAN)

@INDEX를 활용한 정렬

SELECT * FROM EMPLOYEE

WHERE EMP_NO > '0';

@@@ SYNONYM @@@

다른 DB(사용자)가 가진 객체에 대한 별명 혹은 줄임말

다른 사용자의 객체에 접근하는 경우

'사용자명.객체명' 으로 접근해야하지만 SYNONYM(동의어)를 사용하면 간단한 이름으로 접근가능

SYNONYM 생성 방법

[표현식]

CREATE SYNONYM 별명(줄임말)

FOR 사용자명.객체명

동의어 구분

비공개/ 공개 동의어

@1. 비공개 동의어

객체에 대한 접근 권한을 부여받은 사용자가 정의한 동의어로 해당 사용자만 사용 가능

EX) sample 계정을 이용하여 kh계정의 EMPLOYEE

테이블 접근 시 동의어를 설정하여 EMP로 접근하기

1) sample 계정에 kh계정의 EMPLOYEE 테이블 조회 권한 부여

GRANT SELECT ON kh.EMPLOYEE TO sample;

2) kh.EMPLOYEE 테이블 조회 확인

3) kh.EMPLOYEE 테이블의 별명을 EMP로 지정

CREATE SYNONYM EMP

FOR kh.EMPLOYEE;

- 오류 권한이 없음

4) sample 계정에 SYNONYM 생성 권한 부여

GRANT CREATE SYNONYM TO sample;

5) SYNONYM 생성

CREATE SYNONYM EMP FOR kh.EMPLOYEE;

@. 공개 동의어

모든 권한을 부여할 수 있는 계정(DBA)가 정의한 동의어

모든 사용자가 사용할 수 있는 동의어를 생성할 수 있음

(PUBLIC)

EX) DUMMY TABLE - DUAL

EX) kh 계정의 DEPARTMENT 테이블을 DEPT라는

공개 동의어 설정

1) (관리자계정) 공개동의어 생성

CREATE SYNONYM DEPT

FOR kh.DEPARTMENT;

2) 다른계정(sample)도 공개 동의어 (DEPT) 사용가능한지 확인

-> sample 계정에 kh 계정의 DEPARTMENT 테이블 SELECT 권한부여

GRANT SELECT ON kh.DEPARTMENT TO sample

3) (sample 계정)

DEPT(공개 동의어) 사용 가능한지 확인

SELECT * FROM DEPT;

@ 3. 동의어삭제

DROP SYNONYM EMP;

 

 

 

'study > Oracle' 카테고리의 다른 글

localhost:8080 사용자 이름, 암호 문제  (0) 2021.10.17
9_oracle_명령어 정리  (0) 2020.06.09
8_oracle_이론 정리  (0) 2019.11.26
7_oracle_DDL (ALTER, DROP)  (0) 2019.11.23
6_oracle_DML, DCL, TCL  (0) 2019.11.22