Oracle에서 뷰와 구체화 된 뷰의 차이점은 무엇입니까?


답변:


356

구체화 된 뷰는 디스크 기반이며 쿼리 정의에 따라 정기적으로 업데이트됩니다.

뷰는 가상 전용이며 액세스 할 때마다 쿼리 정의를 실행합니다.


54
또한 최신 상태를 유지할 필요가없는 데이터에 대한 성능이 필요한 경우 구체화 된보기가 더 좋지만 데이터는 표준보기보다 오래됩니다. 일반적으로 BI 보고서는 구체화 된 뷰에서 많은 이점을 얻습니다.
Marthinus

29
@Marthinus-커밋 된 REFRESH ON 인 구체화 된 뷰의 경우를 제외하고는 정확합니다. MV는 커밋 된 데이터를 정확하게 반환합니다.
Jeffrey Kemp

2
DISK 기반의 의미는 무엇입니까? 테이블이 DISK의 일부가 아님을 의미합니까? 파일에 저장되어 있고 파일 액세스보다 디스크 액세스가 빠릅니다 ....?
Kanagavelu Sugumar

1
@KanagaveluSugumar 예, 실제 테이블도 디스크에 기록됩니다.
dacracot

5
@dacracot 감사합니다! DISK에서 DB 테이블 이외의 다른 말을 의미한다고 생각합니다. 이 MVIEW는 또한 모든 조인을 해결하여 테이블을 유지 관리합니다. 따라서 런타임에서 단일 테이블 액세스로 충분합니다. 일반적으로 일반 뷰에서 수행되는 조인 조건에 대해 여러 테이블을 쿼리 할 필요가 없습니다. 감사합니다!
Kanagavelu Sugumar

333

견해

뷰를 조회 할 때 뷰 정의의 기본이되는 테이블의 데이터를 평가합니다 . 다른 곳에 데이터가 저장되지 않은 테이블의 논리적 뷰입니다.

보기의 단점은 항상 최신 데이터를 사용자에게 반환 한다는 것입니다 . 단점은 뷰의 성능 이 뷰의 기반이되는 select 문의 성능에 달려 있다는 것입니다. 뷰에서 사용 된 select 문이 많은 테이블을 조인하거나 인덱싱되지 않은 열을 기반으로하는 조인을 사용하면 뷰의 성능이 저하 될 수 있습니다.

구체화 된 뷰

선택문을 기반으로 데이터의 논리적보기라는 점에서 일반보기와 유사하지만 기본 쿼리 결과 세트가 테이블에 저장되었습니다 . 이것의 장점은 구체화 된 뷰를 쿼리 할 때 인덱스 될 수 있는 테이블을 쿼리한다는 것입니다.

또한 모든 조인이 구체화 된보기 새로 고침 시간에 해결되었으므로 구체화 된보기에서 선택할 때마다 결합 가격을 한 번 (또는 구체화 된보기를 새로 고치는 빈도)으로 지불합니다. 또한 쿼리 다시 쓰기가 활성화되면 Oracle은 구체화 된보기에서 읽는 방식으로 구체화 된보기의 소스에서 선택하는 쿼리를 최적화 할 수 있습니다. 구체화 된 뷰를 집계 테이블의 형태로 또는 자주 실행되는 쿼리의 사본으로 작성하는 상황에서는 최종 사용자 애플리케이션의 응답 시간이 크게 단축 될 수 있습니다. 그만큼 단점은 구체화 된보기에서 가져온 데이터가 구체화 된보기를 마지막으로 새로 고친 시점의 최신 정보 일뿐 입니다.


구체화 된 뷰를 수동으로, 설정된 일정에 따라 새로 고치도록 설정할 수 있습니다. 기본 테이블 중 하나에서 데이터의 변경을 감지하는 데이터베이스를 기반 . 구체화 된 뷰는 기초 화 된 테이블에서 변경 데이터 캡처 소스 역할을 하는 구체화 된 뷰 로그와 결합하여 점진적으로 업데이트 할 수 있습니다 .

구체화 된 뷰는 데이터웨어 하우징 / 비즈니스 인텔리전스 응용 프로그램에서 가장 많이 사용되며, 수천만 행의 큰 팩트 테이블을 쿼리하면 쿼리 응답 시간이 발생하여 응용 프로그램을 사용할 수 없게됩니다.


구체화 된 뷰는 스냅 샷 격리 와 유사한 일관된 시간을 보장합니다 .


9
자세한 설명은 +1이지만 쿼리 재 작성의 단점은 무엇입니까? 쿼리 재 작성을 통해 Oracle이 쿼리를 더욱 최적화 할 수 있다면 항상 쿼리 재 작성을 활성화해야합니까?
Rosdi Kasim

6
@Rosdi는 다음과 같이 말했습니다 : "실체화 된 뷰에서 얻은 데이터는 마지막으로 구체화 된 뷰가 새로 고쳐진 시간만큼 최신입니다."
Jeffrey Kemp

49

뷰는 쿼리를 사용하여 기본 테이블에서 데이터를 가져옵니다.

구체화 된 뷰는 쿼리 결과 집합이 포함 된 디스크의 테이블입니다.

구체화 된 뷰는 기본적으로 인덱스가 적용된 표준 뷰를 사용할 수 없거나 바람직하지 않은 경우 응용 프로그램 성능을 향상시키는 데 사용됩니다. 구체화 된 뷰는 트리거를 통해 또는 ON COMMIT REFRESH옵션 을 사용하여 정기적으로 업데이트 할 수 있습니다 . 여기에는 몇 가지 추가 권한이 필요하지만 복잡하지는 않습니다. ON COMMIT REFRESHOracle 10 이상부터 사용되었습니다.


구체화 된보기에서 지정할 수있는 "REFRESH ON COMMIT"옵션이 있습니다
Hybris95

감사! 답변을 업데이트하겠습니다. 이 기능이 언제 Oracle에 추가되었는지 알고 있습니까?
예레미야 페 쉬카

20

뷰는 본질적으로 주어진 쿼리에 의해 즉시 채워지는 논리적 테이블과 같은 구조입니다. 보기 조회 결과는 디스크의 어느 곳에도 저장되지 않으며 조회가 실행될 때마다보기가 다시 작성됩니다. 구체화 된 뷰는 데이터베이스 내에 저장되고 디스크에 기록되는 실제 구조입니다. 작성시 정의 된 매개 변수를 기반으로 업데이트됩니다.


DISK 기반의 의미는 무엇입니까? 테이블이 DISK의 일부가 아님을 의미합니까? 파일에 저장되어 있고 파일 액세스보다 디스크 액세스가 빠릅니다 ....?
Kanagavelu Sugumar

18

구체화 된보기 -쿼리 결과 세트를 포함하는 디스크의 테이블

비 물질 뷰 -기본 테이블에서 데이터를 가져 오는 쿼리


7

보기 : 보기는 명명 된 쿼리 일뿐입니다. 아무것도 저장하지 않습니다. 보기에 조회가 있으면보기 정의의 조회를 실행합니다. 실제 데이터는 테이블에서 가져옵니다.

구체화 된 뷰 : 데이터를 물리적으로 저장하고 주기적으로 업데이트합니다. MV를 쿼리하는 동안 MV의 데이터를 제공합니다.


2

Mike McAllister의 철저한 답변에 추가 ...

구체화 된 뷰는 컴파일러 가 뷰 쿼리를 단순 하다고 간주 할 때 변경 사항을 감지하는 데이터베이스를 통해 자동으로 새로 고치도록 설정할 수 있습니다 . 너무 복잡하다고 생각되면 소스 테이블의 변경 사항을 추적하여 mview 테이블의 변경된 행만 업데이트하기 위해 본질적으로 내부 트리거를 설정할 수 없습니다.

구체화 된 뷰를 만들 때 Oracle은 mview 와 같은 이름을 가진 테이블로 테이블을 생성하므로 혼동 될 수 있습니다.


구체화 된 뷰를 지원하는 테이블의 이름은 뷰와 동일하지 않습니다.
Jeffrey Kemp

@JeffreyKemp, 확실합니까? 여기에 허용 된 답변은 stackoverflow.com/a/33552513이 달리 주장합니다. 당신이 주석 때 그래,이 2010 년 달라졌을 수도 있지만 ...
leqid

위의 의견은 이전 버전 (아마도 9i)이어야합니다. 맞습니다. MV는 적어도 최신 버전에서는 같은 이름의 테이블을 얻습니다.
Jeffrey Kemp

1

구체화 된 뷰는 선택 쿼리에 의한 데이터 중심의 논리적 뷰이지만 쿼리 결과는 테이블 또는 디스크에 저장되며 쿼리 정의도 데이터베이스에 저장됩니다.

구체화 된 뷰의 성능은 구체화 된 뷰의 데이터가 테이블에 저장되고 테이블이 인덱스 될 수 있으므로 구체화 된 뷰 새로 고침 시간에 조인이 이루어 지므로 매번 불필요 할 필요가 없기 때문에 일반 뷰보다 낫습니다. 보기의 경우처럼 조 인문.

또 다른 차이점으로는 View의 경우 항상 최신 데이터를 얻지 만 Materialized View의 경우 최신 데이터를 얻기 위해 뷰를 새로 고쳐야합니다. 구체화 된 뷰의 경우 MV를 새로 고칠 수 있도록 추가 트리거 또는 자동 방법이 필요합니다. 데이터베이스의 뷰에는 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.