0

날짜가 범위 인 큰 팩트 테이블 (수백만 행)과 분할되지 않은 작은 치수 테이블을 가진 차원 모델이 있습니다. 쿼리 성능을 향상시키기 위해 이러한 시나리오에서 자주 사용되는 구체화 된보기를 발견했습니다.치수 모델에서 Oracle Materialized View를 사용하는 방법

이제, 다음 두 가지 방법으로 누적 된 보고서를 얻기 위해 이러한 구체화 된보기를 활용하는 것이 더 나은지 알고 싶습니다.

A. 팩트 테이블 전체를 필요한 각 차원 테이블과 조인하여 하나를 만듭니다.

create materialized view my_mview execute immediate query rewrite 
    select 
     fact.col1, dim1.col2, dim2.col3, sum(fact.col4) 
    from 
     my_fact fact 
    inner join 
     my_dim1 dim1 
     on fact.dim1_key = dim1.dim1_key 
    inner join 
     my_dim2 dim2 
     on fact.dim2_key = dim2.dim2_key group by fact.col1, dim1.col2, dim2.col3 

이것은 이것을 사용하는 가장 기본적인 방법처럼 보입니다. 하지만 그것은 오히려 제한적으로 보입니다. 그리고 나는 각각의 변형에 대한 새로운 구체화 된보기가 필요합니다.

B. 사실 테이블의 집계를 통해 작성하고 차원 조인을 다시 수행 할 때 u 리 재 작성을 활용하십시오.

create materialized view my_mview execute immediate query rewrite 
    select 
     col1, dim1.dim2_key, dim2.dim_key, sum(fact.col4) 
    from 
     my_fact fact 

그리고 조인이 아니라 전체 팩트 테이블이 집계 materialzed보기를 사용하는 경우 (A)에 위와 같이 참여 않습니다.

각 케이스 또는 다른 케이스를 언제 사용할 수 있습니까?

답변

0

첫 번째 예는 설명한대로 작동합니다.

두 번째 예를 들어 쿼리해야한다 : 나는 오라클이에 쿼리의 첫 번째 유형을 다시 생각하지 않는 등

select sum(fact.col4) 
    from fact 

select fact.dim_key,sum(fact.col4) 
    from fact 
    group by fact.dim_key 

select fact.dim2_key,sum(fact.col4) 
    from fact 
    group by fact.dim2_key 

create materialized view my_mview execute immediate query rewrite 
    select 
     col1, fact.dim2_key, fact.dim_key, sum(fact.col4) 
    from 
     my_fact fact 
    group by 
     col1, fact.dim2_key, fact.dim_key 

이 자동으로 집계을 가속화합니다 MV에서 자동으로 조인 열은 이미 그룹화되어 있기 때문에 (자동으로 두 번째 예도 그룹화되어야합니다.) 그것은 우리에게 결코 일어난 일이 아닙니다. 그러나 dim 및 fact 테이블과 QUERY_REWRITE_INTEGRITY 매개 변수 사이에 정의 된 관계가있는 경우에도이 값이 달라질 수 있으므로 여기서도 테스트 할 여지가 있습니다.

당신은 여전히 ​​특정 방법

WITH preaggr as (
    select 
     col1, fact.dim2_key, fact.dim_key, sum(fact.col4) 
    from 
     my_fact fact 
    group by 
     col1, fact.dim2_key, fact.dim_key 
) 

select 
    dim2.col1, 
    sum(preaggr.col4) 
from 
    preaggr 
join 
    dim2 
on 
    preaggr.dim2_key = fact.dim2_key 
group by 
    dim2.col1 
에 쿼리를 작성하여 성능 향상을 얻을 수있다