데이터베이스에서 테이블은 핵심 개체이다. 하지만 테이블 이외에 인덱스, 뷰, 스토어드 프로시저, 트리거, 함수 ,커서 등의 개체도 필요하다.
1. 인덱스(Index)
인덱스란 책의 제일 뒤에 수록되는 ‘찾아보기’ 와 비슷한 개념이다. 책에서 특정 내용을 찾고자 할 때, 처음부터 마지막까지 전부 찾는 것은 오랜 시간이 걸린다. 그래서 찾아보기를 통해 해당 단어를 찾고 옆에 적혀있는 페이지로 이동하는 방법을 사용한다.
마찬가지로 수많은 데이터 속에서 효율적으로 데이터를 찾기 위한 방법으로 인덱스를 사용한다.
select * from member where member_name = '아이유';
sql 문으로 데이터를 조회한다. 이번에는 where 절에 pk가 아닌 열을 이용해 조회한다.
result grid 창의 오른쪽 탭의 화살표를 이용해 execution plan 을 선택한다.
이 창에서 full table scan 을 확인할 수 있다.
full scan 은 테이블 전체 검색으로 처음부터 끝까지 조회를 해 데이터를 찾는다. 그 이유는 member_name 은 기본키가 아니기 때문에 중간에 조회되는 데이터가 있더라도 그 다음 행에 있을지 없을지는 조회를 해야 알 수 있기 때문이다. 따라서 데이터 전체를 조회하게 된다.
현재는 데이터가 적기 때문에 속도 차이가 없지만, 데이터가 아주 많다면 데이터 조회에 많은 시간이 소요가 될 것이다.
create index idx_member_name on member(member_name);
on 테이블 (칼럼명) 을 활용해 인덱스를 생성한다.
select * from member where member_name = '아이유';
다시 조회해본다.
execution plan 탭을 보면 non-unique key lookup 이라 뜬다. key lookup 은 인덱스를 통해 결과를 찾은 것이다. 이를 인덱스 검색(Index Scan) 이라고 한다.
2. 뷰(View)
뷰는 가상의 테이블이다. 일반 사용자 입장에서는 테이블과 뷰를 구분 할 수 없다. 뷰는 실제 데이터를 가지고 있지 않으며, 진짜 테이블에 연결된 개념으로 위도우의 바로가기 아이콘과 비슷한 개념이다.
이렇게 뷰를 사용해 물리적인 테이블 구조를 감추고, 사용자에게 논리적인 데이터 구조만 제공할 수 있어 데이터의 보안이나 일관성을 유지할 수 있다.
create view member_view as select * from member;
member_view 라는 뷰를 생성한다.
select * from member_view;
member_view 를 select 로 조회한다.
member 테이블을 조회했을 때와 동일한 결과가 나타난다.
다만 뷰는 테이블처럼 insert, update, delete 는 되지 않고 select 만 가능하다.
Share article