본문 바로가기

IT일반과목/DataBase

데이터베이스 20180824 (학원12)

@ SYNONYM (동의어)

 test01 계정에서 kh COFFEE볼려고할때

 SELECT * FROM KH.COFFEE;를 조회했다.

 -> 사용자가 다른 사용자의 객체를 참조할때 [사용자ID].[테이블명] 표시

 -> 길게표현되는 것을 동의어로 설정하면 간단하게 사용


1. 비공개 동의어

 -> 객체에 대한 접근을 부여받은 사용자가 정의하는 것

 -> 해당 사용자만 사용할 수 있음

2. 공개동의어

 -> 권한을 주는 사용자(SYSTEM)가 정의한 동의어

 -> 모든사용자가 사용(REPUBLIC)



SYS.DUAL이 있는데

이건 DUAL로 동의어를 저장해놓아서 쓸수 있는 것이다.



@ INDEX

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


@ 장점

 -> 검색속도가 빨라지고, 시스템에 걸리는 부하를 줄여서 전체적인 성능을 향상시킬 수 있음


@ 단점

 -> 인덱스를 위한 추가 저장공간이 필요하고, 인덱스 생성하는데 시간이 걸림

 -> 따라서 데이터의 변경작업(INSERT, UPDATE, DELETE)이 자주일어나는 테이블에서는

INDEX생성시에 오히려 성능이 떨어질 수 있다.

 -> 기존에 데이터에 대해서 알고리즘을 이용해서 INDEX를 생성헀는데 데이터가 변경이 되면 다


시 새롭게 알고리즘을 사용해서 INDEX를 생성해야됨


@ 효율적인 인덱스 사용의 예

 -> 전체 데이터중에 10~15%이내의 데이터를 검색하는 경우

 -> 두개이상의 컬럼이 WHERE절이나 JOIN조건으로 자주 사용되는 경우

 -> 한번 입력된 데이터가 변경이 자주일어나지 않는 경우

 -> 한 테이블에 저장된 데이터 용량이 매우 큰경우


























---------------------------------------------------------------------------


관리자 계정에서

GRANT CREATE SYNONYM TO kh; 해주기


-------------------------------------------------------------

kh계정에서


/*

@ SYNONYM (동의어)

 test01 계정에서 kh COFFEE볼려고할때

 SELECT * FROM KH.COFFEE;를 조회했다.

 -> 사용자가 다른 사용자의 객체를 참조할때 [사용자ID].[테이블명] 표시

 -> 길게표현되는 것을 동의어로 설정하면 간단하게 사용


1. 비공개 동의어

 -> 객체에 대한 접근을 부여받은 사용자가 정의하는 것

 -> 해당 사용자만 사용할 수 있음

2. 공개동의어

 -> 권한을 주는 사용자(SYSTEM)가 정의한 동의어

 -> 모든사용자가 사용(REPUBLIC)

*/


-- EMPLOYEE -> EMP

--동의어는 여기 계정만 사용가능하다.

CREATE SYNONYM EMP FOR EMPLOYEE;


select * from employee;

select * from EMP;



------------------------------------------------------------------

관리자 계정가서



--공개동의어를 만들어 줬다.

CREATE PUBLIC SYNONYM DEPT FOR KH.DEPARTMENT;


--test계정에서 사용할수 있도록 권한을 주었다.

GRANT SELECT ON kh.DEPARTMENT TO test01;


-----------------------------------------------------------------

kh계정가서


SELECT * FROM DEPT;

----------------------------------------------------------------------

test계정가서 조회해보면



select * from kh.department;


select * from dept;


------------------------------------------------------------------------

관리자계정가서


--동의어 제거하기

DROP PUBLIC SYNONYM DEPT;


---------------------------------------------------------------------

kh계정가서


--삭제하기

DROP SYNONYM EMP;


아까 동의어 지정한걸 지워버린 것이다.


-------------------------------------------------------------------------

kh계정가서


/*

@ INDEX

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


@ 장점

 -> 검색속도가 빨라지고, 시스템에 걸리는 부하를 줄여서 전체적인 성능을 향상시킬 수 있음


@ 단점

 -> 인덱스를 위한 추가 저장공간이 필요하고, 인덱스 생성하는데 시간이 걸림

 -> 따라서 데이터의 변경작업(INSERT, UPDATE, DELETE)이 자주일어나는 테이블에서는

INDEX생성시에 오히려 성능이 떨어질 수 있다.

 -> 기존에 데이터에 대해서 알고리즘을 이용해서 INDEX를 생성헀는데 데이터가 변경이 되면 다

시 새롭게 알고리즘을 사용해서 INDEX를 생성해야됨


@ 효율적인 인덱스 사용의 예

 -> 전체 데이터중에 10~15%이내의 데이터를 검색하는 경우

 -> 두개이상의 컬럼이 WHERE절이나 JOIN조건으로 자주 사용되는 경우

 -> 한번 입력된 데이터가 변경이 자주일어나지 않는 경우

 -> 한 테이블에 저장된 데이터 용량이 매우 큰경우

*/


--EMPLOYEE테이블에서 3개로 만드는 것이다.

CREATE INDEX EMP_IND_NND ON EMPLOYEE(EMP_NAME,EMP_NO,HIRE_DATE);


SELECT EMP_NAME, EMP_NO, HIRE_DATE FROM EMPLOYEE;

--F10키 누르기 -->어떤 오브젝트 썼는지 찾을 수 있다.




------------------------------------------------------------------------------------------

--인덱스제거

DROP INDEX EMP_IND_NND;


SELECT EMP_NAME, EMP_NO, HIRE_DATE FROM EMPLOYEE;

--그후 F10누르면