source

구체화된 뷰와표:어떤 장점이 있습니까?

nicesource 2023. 2. 14. 21:29
반응형

구체화된 뷰와표:어떤 장점이 있습니까?

기본 테이블을 조회하는 것보다 구체화된 뷰가 더 좋은 이유는 분명합니다.MV와 동일한 데이터로 다른 테이블을 만드는 것보다 더 나은 점은 명확하지 않습니다. MV의 유일한 장점은 정말 작성과 유지보수의 용이성뿐일까요?

MV는 스키마가 일치하는 테이블과 MVSELECT 문을 사용하여 INSERT INTO에 해당하는 것이 아닌가요?

즉, 다음과 같이 MV를 만들 수 있습니다.

CREATE MATERIALIZED VIEW ... AS
SELECT * FROM FOO;

동등한 테이블을 작성할 수 있습니다.

CREATE TABLE bar (....);
INSERT INTO bar 
SELECT * FROM FOO;

작성/유지보수가 간단하다고 해서 장점이 되는 것은 아닙니다.무엇을 빠뜨리지 않았는지 확인하고 싶을 뿐입니다.

동적 쿼리 개서구체화된 뷰는 관계를 정의할 뿐만 아니라 비용이 많이 드는 결합 및 집계를 미리 계산할 수도 있습니다.최적화 도구는 MV가 쿼리에서 명시적으로 사용되지 않더라도 MV를 사용하여 관련 데이터를 가져올 수 있을 만큼 스마트합니다(예: DB 설정).

질문에 Oracle로 태그가 붙었지만 MSQL에서도 비슷한 트릭이 적용됩니다.

기본적으로는 동일하지만, MV에는 데이터를 자동으로 갱신하는 다양한 옵션이 있어 유지보수가 용이할 뿐만 아니라 행별로 변경을 추적할 수 있기 때문에 경우에 따라서는 효율성도 향상됩니다.

구체화된 보기는 새로 고칠 수 있습니다. 정기적으로 생성된 데이터의 스냅샷입니다.

두 번째 진술은 일회성 거래일 뿐이며, 그 시점에 데이터가 테이블에 삽입됩니다.원본 데이터에 대한 추가 변경 사항은 표에 반영되지 않습니다.

  1. 구체화된 뷰는 그것이 의존하는 기본 관계와 동기화된 상태로 유지됩니다.

  2. 구체화 뷰를 업데이트할 수 있는 경우 구체화 뷰를 수정할 때 종속된 기본 관계도 수정합니다.

Materialized View의 큰 장점은 삽입/업데이트/삭제 비용을 들여 미리 계산하고 저장하기 때문에 집계 데이터를 매우 빠르게 검색할 수 있다는 것입니다.데이터베이스는 Materialized View를 실제 데이터와 동기화된 상태로 유지하므로 휠을 다시 발명할 필요가 없습니다.데이터베이스에 맡겨주세요.

1) 쓰기 작업 속도 향상:구체화된 뷰에 인덱스를 생성할 수 있으므로 인덱스에서 읽는 속도가 매우 빠릅니다.많은 쓰기가 포함된 테이블에 인덱스를 생성할 경우 인덱스 유지 관리 오버헤드로 인해 쓰기 프로세스가 느려지는 경향이 있습니다.이를 방지하려면 구체화 보기를 만들고 이 뷰에 색인을 작성할 수 있습니다.이러한 인덱스는 백그라운드에서 유지할 수 있으며 테이블 쓰기 작업에 부정적인 영향을 미치지 않습니다.

2) 읽기 작업 속도 향상:복잡한 결합: 구체화된 뷰에 인덱스를 생성하여 실행하는 데 시간이 걸리는 피벗의 속도를 높일 수 있습니다.이것은 대부분의 보고 시나리오에서 매우 편리합니다.

올바른 비교는 다음과 같습니다.

REFRESH MATERIALIZED VIEW bar;

비교:

CREATE TABLE bar (....);
INSERT INTO bar 
SELECT * FROM FOO;

MV는 한 번 만들고 선택을 해야 할 때 새로 고칠 수 있기 때문에(또한 정보가 얼마나 자주 변경되는지 알고 있는 경우에는 몇 가지 콜을 할애할 수도 있습니다).

또한 뮤직비디오를 제공하고 인덱싱할 수 있으며, 이는 다른 방법이 없습니다.물론 그것은 큰 결과 세트에 대해서만 MV의 성능을 선호할 것이다.

포스트그레스에서는, 다음과 같이 할 수도 있습니다.

REFRESH MATERIALIZED VIEW CONCURRENTLY bar;

하나는 종료되지 않은 상태이고 다른 하나는 해당 시점까지의 정보를 필요로 하는 경우 두 개의 병렬 프로세스를 통해 새로 고칩니다.실행 중인 쿼리의 내용을 재사용하기 위해 어느 정도 최적화가 이루어진 것 같습니다.

이것은 SELECT INTO에서는 할 수 없는 것입니다.

이미 언급한 이점에 더해 다음과 같은 이점을 제공합니다.

  • 동적 쿼리 개서(요컨대 DB 옵티마이저는 MV가 생성되는 방법을 알고 있기 때문에 MV를 재사용하여 다른 쿼리를 최적화할 수 있습니다),
  • 옵션, 자동, 경우에 따라서는 증분 갱신,

말씀드리겠습니다.

  • 구체화된 뷰는 소스 테이블을 갱신하는 일부에 쓸 수 있습니다(예를 들어, 구체화된 뷰가 그룹에 의해 작성되지 않은 경우 프라이머리 키로 조인할 수 있습니다).
  • DB 서버는 데이터를 생성한 쿼리를 유지하며 데이터를 다시 실행할 수 있습니다.테이블을 작성할 경우 사용자가 새로고침이 필요하거나 요청할 때마다 쿼리를 다시 실행하기 위한 외부 도구(아마도 사용자 지정 스크립트)가 필요합니다.(저는 그것을 실현하는 툴을 개발하는 회사에 근무하고 있습니다).

다른 답변과 함께(내가 보지 않았기 때문에) 둘 다 공간을 사용하지만, 구체화된 뷰는 논리적으로 정규화된 반면, 여분의 테이블은 논리적으로 정규화되지 않았다고 말할 수 있습니다.일시적이지 않은 경우 기본 테이블을 업데이트할 때마다 두 번째 테이블을 업데이트해야 합니다.

테이블과 MV의 차이는 테이블에 있습니다.DML 조작은 다른 사용자가 볼 수 있지만 MV에 대한 변경은 데이터베이스 서버를 갱신할 때까지 다른 사용자가 사용할 수 없습니다.

MV는 복잡한 쿼리를 사용하여 여러 테이블을 기반으로 MV를 구축하면 사용자가 MV를 사용하면 성능이 대폭 향상됩니다.

실제로는 업데이트된 결과 세트를 표시하기 위해 정기적으로 집계가 필요한 테이블보다 구체화 보기를 선택하는 것이 가장 좋습니다.인벤토리 모듈의 Data ware housing 이외의 Materialized 뷰를 사용하여 매번 복잡한 쿼리를 사용하는 것이 아니라 마감 잔액으로 일별, 주별, 월별 재고를 계산할 수 있으며, 즉시 결과를 얻을 수 있습니다.

Oracle에서 복잡한 쿼리가 발생하면 해당 쿼리를 실행하는 데 시간이 더 걸립니다.사용자가 실행 시간을 단축하고 싶다면 구체화된 뷰가 가장 좋습니다.먼저 작성 후 해당 쿼리로 구체화된 뷰를 작성해야 합니다.기본 테이블 대신 단순하게 구체화된 뷰를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4218657/materialized-view-vs-tables-what-are-the-advantages

반응형