인덱스
<장점>
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 empno, ename FROM scott.emp;
이 두 쿼리의 결과는 같다!
<공개
동의어의 제거하기>
-> 동의어를
소유한 사용자로 접속해야만 제거가 가능합니다
SQL>DROP SYNONYM scott_emp;
->SYNONYM 이용한
조회
SQL>SELECT empno,
ename FROM
scott_emp;