SyntaxHighlighter.all(); ORCLE_객체(인덱스,뷰,시노님) :: 또르의 개발노트 ss
반응형

오라클 객체

 

(1)인덱스 : SQL명령문의 처리 속도를 향상시키기 위해서 컬럼에 생성하는 오라클 객체

인덱스의 장점

1)검색속도가 빨라진다

2)시스템에 부하를 줄여서 시스템의 전체 성능을 향상시킨다


인덱스의 단점

1)인덱스를 위한 추가 공간이 필요하다

2)인덱스를 생성하는 데 시간이 걸린다

3)데이터의 변경 작업 이 자주 일어날 때는 오히려 성능이 저하된다.

*인덱스는 조회의 성능을 향상시키는 객체


-자동 인덱스: 프라이머리 키 또는 UNIQUE 제한 규칙에 의해 자동적으로 생성되는 인덱스

-수동 인덱스: CREATE INDEX 명령을 실행해서 만드는 인덱스

 

*인덱스를 생성하는 것이 좋은 컬럼은??

1) 테이블의 행의 수가 많을 때

2) WHERE문에 해당 컬럼이 많이 사용 될 때

3) 검색 결과가 전체 데이터의 2~4%일때

4) join에서 자주 사용되는 컬럼이나 null을 포함하는 컬럼이 많은 경우


 B-tree원리

 -주어진 값을 리스트의 중간점에 있는 값과 비교한다. 만약 그 값이 더 크면 리스트의 아래쪽  반을 버린다. 만약 그값이 더 작다면 위쪽 반을 버린다.

 -하나의 값이 발견될 때 까지 또는 리스트가 끝날 때까지 그와 같은 작업을 다른 반쪽에도 반복한다.

 

*다음과 같은 경우에는 인덱스 생성이 불필요 하다.

1)테이블이 작을 때

2)테이블이 자주 갱신될 때

 

인덱스문법

SQL> CREATE [BITMAP/UNIQUE/NON-UNIQUE/] INDEX emp_deptno_indx

ON emp(deptno);

 

비트맵 인덱스

비트맵 인덱스는 각 컬럼에 대해 적은 개수의 독특한 값이 있을 경우에 사용하는 것이 좋다.(ex 남,여의 값을 가지는 성별 컬럼)

비트맵 인덱스는 B-tree 인덱스가 사용되지 않을 경우에서 성능을 향상 시킨다.

테이블이 매우 크거나 수정/변경이 잘 일어나지 않는 경우에 사용할수 있다.

 

UNIQUE 인덱스

UNIQUE 인덱스는 인덱스를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있는 장점이 있다.

프라이머리키 와 UNIQUE 제약 조건시 생성되는 인덱스는 UNIQUE 인덱스이다.

 

NON-UNIQUE 인덱스

NON-UNIQUE 인덱스는 인덱스를 사용한 컬럼에 중복 데이터 값을 가질수 있다.

 

결합 인덱스

복수개의 컬럼에 생성할 수 있으며 복수키 인덱스가 가질수 있는 최대 컬럼값은 16개 이다.

SQL> CREATE UNIQUE INDEX emp_empno_ename_indx

ON emp(empno, ename);


인덱스의 삭제

인덱스의 구조는 테이블과 독립적이므로 인덱스의 삭제는 테이블의 데이터에는 아무런 영향도 미치지 않는다.

인덱스를 삭제하려면 인덱스의 소유자 이거나 DROP ANY INDEX권한을 가지고 있어야 한다.

인덱스는 ALTER를 할 수 없다.

SQL> DROP INDEX emp_empno_ename_indx;


인덱스 데이터사전

인덱스에 대한 정보는 USER_INDEXES 뷰 또는 USER_IND_COLUMNS뷰를 통해 검색할 수 있다.

 

SQL> SELECT index_name, index_type

FROM USER_INDEXES

WHERE table_name='EMP';

 

INDEX_NAME              INDEX_TYPE

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

EMP_DEPTNO_INDX         BITMAP

EMP_PK_EMPNO            NORMAL



 

 

(2)VIEW 테이블

VIEW?

- 뷰는 하나의 가상테이블이다

- 뷰는 실제 데이터가 저장되지는 않지만 데이터를 관리 할 수 있다.

- 뷰는 복잡한 쿼리를 통해 얻을 수 있는 결과를 간단한 쿼리로 얻을 수 있게 한다.

- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색 할 수 있다.

- 특정 평가 기준에 따른 사용자 별로 다른 데이터를 액세스할 수 있도록 한다.

 

뷰의 제한 조건

- 테이블에 NOT NULL로 만든 컬럼들이 뷰에 다 포함이 되 있어야 한다.

- ROWID, ROWNUM, NEXTVAL, CURRVAL등과 같은 가상컬럼에 대한 참조를 포함하고 있는 뷰에는 어떤 데이터로 INSERT 할 수 없다.

-WITH READ ONLY옵션을 설정한 뷰도 데이터를 갱신 할 수 없다.

-- 아래 뷰는 읽기만 가능하다.

SQL> CREATE OR REPLACE VIEW read_only

AS

SELECT empno, ename, deptno

FROM  emp

WHERE deptno = 10

WITH READ ONLY;

 

-WITH CHECK OPTION을 설정한 뷰는 뷰의 조건에 해당되는 데이터만 삽입, 삭제, 수정을 할 수 있다.

-----------부서 번호 10의 데이터를 조회 하는 뷰-------------

SQL> CREATE OR REPLACE VIEW check_option

AS

SELECT empno, ename, deptno

FROM  emp

WHERE deptno = 10

WITH CHECK OPTION ;

 

-- 부서 번호가 10인 사원만 INSERT, UPDATE할 수 있다.

SQL> INSERT INTO check_option(empno, ename, deptno)

VALUES (10005, 'jain', 30);

 

INSERT INTO check_option(empno, ename, deptno)

*

1행에 오류:

ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다

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

 

뷰 문법

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view_name

AS subquery

[WITH CHECK OPTION [CONSTRAINT 제약조건]]

[WITH READ ONLY]

 

-- 뷰 생성    

SQL> CREATE OR REPLACE VIEW name_query

AS

SELECT a.ename, b.dname

FROM  emp a, dept b

WHERE a.deptno = b.deptno

AND b.deptno = 20;

 

--------뷰를 이용한 조회----------

SQL> SELECT * FROM name_query;

 

ENAME                DNAME

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

SMITH                RESEARCH

JONES                RESEARCH

 

(3)시퀀스의 이해 및 활용

시퀀스란?

-유일한 값을 생성해주는 오라클 객체이다

-시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다.

보통 PRIMARY KEY 값을 생성하기 위해 사용한다.

-메모리에 Cache되었을 대 시퀀스값의 액세스 효율이 증가한다.

-시퀀스는 테이블과는 독립적으로 저장되고 생성된다.

 

시퀀스 생성

CREATE SEQUENCE sequence_name

     [START WITH n] - 시퀀스의 시작 값을 시정한다

     [INCREMENT BY n]  - 시퀀스의 증가 값을 지정한다

     [MAXVALUE n | NOMAXVALUE] - 시퀀스 최대값

     [MINVALUE n | NOMINVALUE] - 시퀀스 최소값

     [CYCLE | NOCYCLE] - 최대값 도달시 순환 여부

     [CACHE | NOCACHE] - CACHE 여부, 원하는 숫자만큼 미리 만들어 Shared Pool의      Library Cache에 상주시킨다.

시퀀스 수정 ALTER SEQUENCE sequence_name ...

시퀀스 삭제 DROP SEQUENCE seq_empno...


시퀀스 데이터 딕셔너리

USER_TABLES

USER_VIEWS

USER_SEQUENCE


CURRVAL 과 NEXTVAL

1)CURRVAL: 현재 값을 반환합니다.

2)NEXTVAL: 현재 시퀀스값의 다음 값을 반환합니다.


CURRVAL, NEXTVAL 사용하기

1)NEXTVAL로 새로운 값을 생성한다.

SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;

NEXTVAL

-----------

10 


2)시퀀스의 현재값을 알아내기 위해서 CURRVAL을 사용한다

SELECT DEPT_DEPTNO_SEQ.CURRBAL FROM DUAL;

CURRVAL

-----------

10 



3)DEPT_DEPTNO_SEQ.CURRVAL을 조회할 때마다 시퀀스의 값이 계속 증가합니다. 증가치를 10으로 지정하였으므로 실행 할때마다 시퀀스 값은 10씩 증가합니다.

SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;

NEXTVAL

-----------

10 

SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;
20
SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;
30...

 

(4)SYNONYM(동의어)  

동의어를 사용하는 이유

1)데이터베이스의 투명성을 제공하기 위해서, 다른 유저의 객체 참조할 때 사용

2)객체의 긴 이름을 사용하기 편한 짧은 이름으로 해서 SQL코딩을 단순화

3)객체를 참조하는 사용자의 오브젝트를 감출 수 있기 때문에 보안을 유지할 수 있다.

 

종류

1)Private Synonym: 전용 시노님은 특정 사용자만 이용할 수 있다.

2)Public Synonym: 공용 기노님은 공용 사용자 그룹이 소유하며 그 데이터베이스에 있는 모든 사용자가 공유한다.



[출처]http://www.gurubee.net/oracle/sql

반응형

+ Recent posts