본문으로 바로가기

[DATA BASE][인덱스]

category DATABASE 2018. 4. 20. 16:03


인덱스





<장점>
1.검색속도 무척빠름
2.
시스템전체 성능향상
<단점>
1.데이터베이스크기의 10% 추가공간필요
2.
첫 인덱스 생성에 시간많이 소요
3.
변경작업(insert,update,delete)
 자주 일어나면 오히려 성능 저하



<인덱스 종류>
1 BITMAP인덱스
2
함수 기반 인덱스
3
어플리케이션 도메인 인덱스
4
B-TREE인덱스(OLTP)
-꼭 필요한 인덱스만 최소로 생성!



<예제 ;
자동으로 생성되는 인덱스>
-인덱스는 테이블의 열(컬럼) 단위 생성!!
-
테이블 생성 시,제약조건


PRIMARY KEY / UNIQUE

용하면
자동으로 인덱스 생성












<인덱스 특징>
1. 인덱스 생성 시에는 데이터 블록은 그냥 둔 상태에서 별도의

 블록에 인덱스를 구성한다.
2.
인덱스의 리프 블록은 데이터가 아니라, 데이터가 위치하는 

주소값(ROWID) 이다.
3.
데이터의 입력/수정/삭제 시 인덱스가 없을 때보다 느리다
4.
인덱스는 여러 개 생성할 수 있다. 하지만 남용 경우 

시스템 성능 떨어트린다.


<인덱스 생성>


CREATE INDEX 인덱스명

ON 테이블명 (컬럼1,컬럼2......);


CREATE TABLE INTEST
(
     ID VARCHAR2(8),
     NAME VARCHAR2(10)
);


INSERT INTO INTEST VALUES('LSG','이승기');
INSERT INTO INTEST VALUES('KBS','
김범수');
INSERT INTO INTEST VALUES('KKH','
김경호');
INSERT INTO INTEST VALUES('JYP','
조용필');
INSERT INTO INTEST VALUES('SSK','
성시경');
INSERT INTO INTEST VALUES('LJB','
임재범');
INSERT INTO INTEST VALUES('YJS','
윤종신');
INSERT INTO INTEST VALUES('EJW','
은지원');
INSERT INTO INTEST VALUES('JKW','
조관우');
INSERT INTO INTEST VALUES('BBK','
바비킴');


<인덱스 확인>


SELECT INDEX_NAME, LEAF_BLOCKS, DISTINCT_KEYS,NUM_ROWS FROM USER_INDEXES
WHRER TABLE_NAME=‘USERTBL’;



<인덱스 작동확인>
1 SELECT*FROM INTEST
WHERE ID=‘BBK’;


2 f10 눌러서 실행계획 확인


<인덱스 삭제>

DROP INDEX 인덱스명 ;


1.인덱스 = 검색속도향상
2.
primary key / unique 자동으로 생성
3.
인덱스는 B-tree구조
4.
생성 = create index
5.
삭제 = drop index
6.
인덱스가 있다고 oracle이 반드시 인덱스를 사용하는 것은 아니다



<동의어>


Synonym>
:오라클 객체(테이블,,시퀀스,프로시저)에 대한
대체이름. 실질적으론 객체에 대한 직접적인 참조
 
< Synonym 사용하는 이유 >
1.
데이터베이스의 투명성 제공
2.
다른유저의 객체를 참조할때 많이 사용
3.SQL
코딩을 단순화
4.
보안 유지 


<When?>
:
객체의 실제 이름과 소유자,위치를 감춤으로써 데이터베이스 보안개선 목적




<종류>
1.
Private Synonym
->
특정 사용자만 이용

2.
public Synonym
->
모든 사용자 공유



<명령형식>


CREATE [PUBLIC] SYNONYM synonym_name
FOR
user_name.object_name;



<실습하기> 테이블 생성후 객체 권한 부여하기 


1.먼저 scott/tiger user로 접속해서 test user에게 emp테이블을 조작할 권한을부여


CONN scott/tiger

GRANT ALL ON emp TO user;


2. User로 접속해 동의어 생성


Conn user/psw

CREATE SYNONYM scott_emp FOR scott.emp;


그림 

1

2





3. Synonym 이용한쿼리


SQL>SELECT empno, ename FROM scott_emp;






3.
일반테이블 이용한쿼리

SQL>SELECT empnoename FROM scott.emp;



  두 쿼리의 결과는 같다!



<공개 동의어의 제거하기>

->
동의어를 소유한 사용자로 접속해야만 제거가 가능합니다

SQL>DROP SYNONYM scott_emp;

->SYNONYM 이용한 조회
SQL>SELECT
empno, ename FROM scott_emp;






'DATABASE' 카테고리의 다른 글

[DATABASE][프로시저(PROCEDURE)]  (0) 2018.04.23
[DATABASE][시퀀스]  (0) 2018.04.22
[DATABASE][SCHEMA]  (0) 2018.04.20
[DATABASE][view]  (0) 2018.04.20
[DATABASE][SUBQUERY]  (0) 2018.04.20