본문 바로가기
컴퓨터/Oracle

[Oracle]MATERIALIZED VIEW 데이터가 있는 뷰

by TEATO 2014. 7. 23.
반응형

[Oracle]MATERIALIZED VIEW 데이터가 있는 뷰


일반적으로 VIEW는 데이터가 없는 가상의 테이블이죠.

그렇기 때문에 VIEW를 조회하면 내부적으로는 각각의 테이블로 가서 조인을

수행하죠. 하지만 MATERIALIZED VIEW는 VIEW를 만들때 실제로 데이터까지

만드는 것입니다. 이렇게되면 조인을 할때 저장되어있는 데이터를 불러오기만 하면 되겠죠.

이처럼 성능상의 이유로 MATERIALIZED VIEW를 사용합니다.


이러한 문법으로 생성할 수 있습니다.

REFRESH는 테이블에 업데이트가 있을경우 그 방법을 명시하는 부분입니다.

ENABLE QUERY REWRITE는 쿼리를 재사용한다는 뜻입니다. 아래쪽에 예제가 있습니다.


REFRESH 옵션

- COMPLETE : 전부 삭제한뒤 다시 갱신한다.

- FAST : 바뀐부분만 다시 갱신한다. 



만들어진 MATERIALIZED VIEW를 조회하기위해서는 USER_OBJECTS를 조회해보면 되는데요

위를보시면 TABLE로도 있고 MATERIALIZED VIEW로도 있는것을 발견할 수 있습니다.

데이터도 저장해야하므로 TABLE도 있는 것입니다.


위에서 REWRITE를 쿼리 재사용기능이라고 했는데요.

위의 실행계획을 보시면 REWRITE ACCESS FULL이라고 되어있는걸 볼 수 있습니다.

쿼리가 재사용되면서 데이터를 빠르게 읽어올 수 있죠.


NOREWRITE를 하면 쿼리가 재사용되지않아 원래의 실행계획대로 작동하는것을 볼 수 있습니다.


MATERIALIZED VIEW를 만들기위해서는 VIEW LOG란것이 필요한데요.

VIEW LOG가 없으면

ORA-23413: 테이블 "SCOTT"."EMP"에 구체화된 뷰 로그가 없음

이런 메세지가 떨어집니다. 

MATERIALIZED VIEW는 실제로 데이터가 저장되기때문에 VIEW LOG란것이 필요한데요

실제 테이블의 데이터에 변경이 발생하면 이 VIEW LOG에 기록이 되고 이를바탕으로

MATERIALIZED VIEW에 업데이트를 하는 것입니다.

그렇기 때문에 VIEW LOG가 꼭 필요하겠죠.


REFRESH의 FAST, COMPLETE뒤에 ON COMMIT 이라는 조건은 

업데이트가 발생하면 바로 MVIEW에 적용을 한다는 것을 뜻합니다.

REFRESH FAST 뒤에

start with sysdate
next sysdate + (1/24)

 이라고 하면 1시간에 한번씩 모았다가 업데이트를 해줍니다.


이미 MVIEW를 만들었는데하루에 한번씩 업데이트 되도록 바꾸고싶다 하면

alter materialized view [view_name] refresh next sysdate + 1;

이렇게 바꿔주면 하루에 한번 업데이트가 됩니다.


반응형

댓글