[DB] Materialized View (MView, 구체화 뷰)

jhkim·2023년 4월 23일
0

새벽 미팅에서 materialized view(이하 mview)에 대한 설명을 들었다.
마침 얼마전 뷰에 대해서 공부했으니, 그때 들었던 설명을 되짚으며 중요한 부분만 가볍게 살펴보자

일반 뷰랑 뭐가 다를까?

일반 뷰와 다르게 테이블처럼 실제로 공간을 차지하며 물리적으로 존재하는 테이블이다.
뷰는 SELECT문을 저장해두고, 필요할 때마다 그 쿼리를 실행해서 보는 방식이라 실체가 없다.
그러나 MView는 일반 테이블처럼 실제로 공간을 차지한다.
자주 사용되는 뷰의 결과를 디스크에 저장해두고, 쿼리 속도를 향상시키는 방식이다.

그러면 뭐가 좋을까?
일반 뷰는 정해둔 SELECT문을 실행시키는 방식인데, 데이터가 많으면 이 조회 시간이 꽤 걸릴 것이다. 반면 MView는 그 뷰의 결과를 한 테이블에 저장해두고 그 테이블을 조회하는 방식으로, 쿼리 속도를 향상시킨다.



MView의 갱신

MView도 일반 뷰와 마찬가지로, 원본 테이블이 수정되면 MView에서도 수정된다.
그러나 뷰처럼 바로 수정되지는 않는다.
뷰는 그때그때 조회하는 방식이지만, MView는 따로 저장해두는 방식이기 때문이다.

MView는 사용자가 직접 갱신할 수도 있고, 주기적으로 자동 갱신할 수도 있다.

  • MView의 REFRESH속성을 ON DEMAND(수동 갱신 모드)로 설정하고, 정기적으로 갱신하도록 따로 스케줄링하기. 데이터 변경 빈도가 낮은 경우 스케줄러의 주기를 늘려서 설정
  • REFRESH속성을 FORCE로 설정하기 : 기반 테이블 데이터 변경시 자동으로 MView갱신. 실시간성이 보장된다.
  • DEFERRED 모드로 설정하기: MView최초 생성시 데이터가 저장되지 않고, 첫 번째 조회시에 데이터 생성. 이후에는 FORCE모드처럼 데이터 변경시마다 자동으로 갱신됨



그래서 MView를 왜 쓴다고?

뷰의 장점은 취하면서, 쿼리 결과를 캐싱해두므로 속도는 향상시킨다는 장점이 있다. 복잡한 쿼리를 매번 실행할 필요가 없으므로 빠른 데이터 접근 및 처리가 필요한 대규모 데이터 웨어하우스나 분석 시스템에서 유리하다.

특히 인덱스가 무거워질 때 유리하다. 조인이나 조건절이 길어지면 인덱스가 무거워지는데(인덱스 블록 로드 과해짐), 이 때 조회된 결과를 저장해놓기 때문에 조회할 때마다 엄청난 양의 인덱스 블록을 뒤질 필요가 없다.

0개의 댓글