INDEX (색인)
- index( 색인 ) 은 검색을 빠르게 하기 위한 수단이다
- Primary key 와 Unique key 가 지정되면 따로 index 를 생성된다
- Index 장점
- 검색 속도가 빨라진다
- 시스템의 부하를 줄여 성능 향상
- Index 단점
- 인덱스 생성에 시간과 공간 필요
- 삽입 갱신 삭제 가 빈번히 일어날 경우 성능 저하
- Index가 필요한 경우
- 데이터가 많을 경우
- JOIN이 많이 사용된 경우
- Index가 불필요한 경우
- 데이터가 적을 경우
- 삽입갱신 삭제 가 빈번히 일어나는 경우
1) UNIQUE INDEX
- 중복되지 않는 데이터에 대해서 Index를 걸어 준다.
- PK or UK를 설정하면 자동으로 설정 된다.
- CREATE UNIQUE INDEX [index name] ON TABLE
select * from emp;
-- ename은 이미 중복이 있는 데이터이기 때문에 unique index 생성이 불가능하다.
create unique index emp_ename_idx on emp(ename);
2) NON-UNIQUE INDEX
- 중복된 데이터가 있는 경우 INDEX를 걸어준다.
- CREATE INDEX [index name] ON TABLE
create index emp_ename_idx on emp(ename);
3) 결합 INDEX
- CREATE [UNIQUE] INDEX [index name] ON TABLE
create index emp_combi_idx on emp(ename,job,deptno);
4) 인덱스 삭제 (속성 취급)
- ALTER TABLE [table name] DROP INDEX [index name];
alter table emp drop index emp_combi_idx;
alter table emp drop index emp_ename_idx;
5) 인덱스 확인 (인덱스 데이터 사전)
show index from emp;
VIEW
- 여러 테이블의 데이터를 모아서 만든 가상 테이블이다.
- 복잡한 조인이나 서브쿼리를 이용한 데이터를 뷰로 만들어두면 다음 사람이 편리하게 사용할 수 있다.
- 물리적인 실체가 없으므로 자신만의 인덱스를 가질 수 없다.
1) VIEW 생성 문법
- Query 안에 담긴 조건으로 VIEW를 생성하겠다는 의미
- CREATE [OR REPLACE] VIEW [view name] AS [QUERY];
- OR REPLACE : 기존 뷰를 수정 할 때 사용
create view vw_name as
select e.ename, d.deptname from emp e join dept d on e.deptno = d.deptno ;
2) VIEW 사용 (일반 테이블과 똑같다.)
3) VIEW에서 데이터 수정
- 뷰에서 수정하면 해당 원본 테이블의 데이터도 수정 된다.
- 대신 뷰를 생성할때 포함 된 데이터여야만 수정된다.
update vw_name set ename = 'oh' where ename='kim';
select from emp;
select from dept;
4) VIEW 수성
- CREATE OR REPLACE VIEW [view name] AS [QUERY];
- CREATE OR REPLACE : 만약 해당 뷰가 있으면 수정 없으면 생성
- ALTER로도 수정은 가능하지만 복잡
create or replace view vw_name as
select e.ename, d.deptname, d.loc from emp e join dept d on e.deptno = d.deptno ;
5) with check option
- 뷰를 생성한 조건식을 만족하는 컬럼은 update할 수 없도록 하는 옵션
- where 조건에 들어간 deptno컬럼은 수정이 불가능함
create or replace view vw_chk as
select ename, job,deptno from emp where deptno = 1 with check option ;
update vw_chk set job='manager' where ename = 'lee';
- CHECK OPTION failed
- 만약 with check option이 없다면 수정된 내용이 변경되었을 때 뷰에서 빠질 수 있다.
update vw_chk set deptno='2' where ename = 'lee';
6) 생성된 VIEW 조회
- 생성한 뷰 조회
show full tables where table_type = 'VIEW';
- 특정 뷰에 대한 정보(뷰를 생성한 쿼리문)
show create view vw_name;
7) VIEW 삭제
drop view vw_name;
drop view vw_chk;