SELECT * FROM USER_INDEXES;
장점 | 단점 |
---|---|
검색 속도가 빠름 | 추가 저장 공간이 필요함 |
시스템 부하를 줄여 성능이 향상됨 | 인덱스 생성 시간이 소요됨 |
INSERT, UPDATE, DELETE 성능이 저하됨 |
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
-> Table Full Scan
-> Index Scan
where절(조건절)에 자주 사용되는 칼럼
조인시 조건
두개 이상의 칼럼인 경우 복합 인덱스(동시에 검색)
숫자, 날짜, 문자(CHAR)
Primary Key, Unique Key 제약조건 자동 생성
칼럼의 값을 가공하기 전 상태에서 조건 지정
뷰 | 서브쿼리 |
---|---|
SELECT * FROM VW_EMP20; | SELECT * FROM(SELECT EMPNO, ENAME, JOB, DEPTNO FROM EMP WHERE DEPTNO = 20); |
순번 : 순서가 있는 번호
오라클 DB에서 특정 규칙에 맞는 연속 숫자를 생성하는 객체
은행이나 병원의 대기 순번표와 마찬가지로 번호를 사용해야 하는 사용자에게 계속 다음 번호를 만들어주는 역할을 함
단지 연속하는 새로운 번호를 만드려면 아래와 같이 해도 됨. 하지만,동시에 여러 곳에서 새로운 번호를 요구했을 때 결과값이 중복될 가능성이 있으며 테이블 데이터가 많아질수록 시간도 늘어난다는 문제점이 있음
SELECT MAX(글 번호) + 1
FROM 게시판 테이블
CREATE SEQUENCE 시퀀스이름
[INCREMENT BY n] //증가값(선택)
[START WITH n] //시작값(선택)
[MAXVALUE n | NOMAXVALUE] //최대(선택)
[MINVALUE n | NOMINVALUE] //최소(선택)
[CYCLE | NOCYCLE] //순환(선택)
[CACHE n | NOCACHE] //미리 저장해 두는 것(선택)
CREATE TABLE DEPT_SEQUENCE
AS SELECT * FROM DEPT
WHERE 1 <> 1;
SELECT * FROM DEPT_SEQUENCE;
객체의 앞에 객체의 종류를 뜻하는 것을 붙임
ex)SEQ_DEPT
-> 실무에서는 보통 이렇게 만듦
CREATE SEQUENCE SEQ_DEPT INCREMENT BY 1 START WITH 1 MAXVALUE 9999999 MINVALUE 1;
SELECT SEQ_DEPT.CURRVAL FROM DUAL;
위의 코드를 바로 실행하면 다음과 같은 에러가 발생한다
ORA-08002: sequence SEQ_DEPT.CURRVAL is not yet defined in this session
08002. 00000 - "sequence %s.CURRVAL is not yet defined in this session"
Cause: sequence CURRVAL has been selected before sequence NEXTVAL
Action: select NEXTVAL from the sequence before selecting CURRVAL
세션에서 아직 정의되지 않았다는 에러이다. 현재 세션에서 NEXTVAL을 해야지만 현재 값을 갖고 올 수 있다. 세션에 아무것도 없는 데 현재 값을 가지고 올 수는 없기 때문이다. 즉, 시퀀스는 세션을 기반으로 고유 번호를 생성한다는 사실을 알 수 있다.
SELECT SEQ_DEPT.NEXTVAL FROM DUAL;
다음값을 확인한 후 현재값을 확인해야 값이 나옴
INSERT INTO DEPT_SEQUENCE VALUES (SEQ_DEPT.NEXTVAL, 'DATABASE', 'SEOUL');
SELECT * FROM DEPT_SEQUENCE ORDER BY DEPTNO;
CREATE [PUBLIC] SYNONYM 동의어 이름
FOR [사용자.][객체이름];