통계 뷰의 표현식 컬럼에서 사용되는 통계

쿼리 옵티마이저는 통계 뷰에 있는 표현식 컬럼의 통계를 사용하여 정확한 카디널리티 추정치를 얻을 수 있으며 이로 인해 보다 나은 액세스 플랜을 작성할 수 있습니다.

예를 들어, UCASE 스칼라 함수를 사용하는 쿼리를 고려하십시오.
    SELECT * FROM t1, t2 WHERE t2.c2 = UCASE(t1.c1)

쿼리 옵티마이저는 이러한 유형의 쿼리에 대한 통계 뷰에서 통계를 사용하여 보다 나은 액세스 플랜을 확보할 수 있습니다.

이전 예의 쿼리는 컬럼 c1의 UCASE 스칼라 함수를 포함하는 통계 뷰에서 사용할 때 이점이 있습니다. 다음 예는 컬럼 c1에 UCASE 스칼라 함수를 포함하는 뷰를 작성합니다.
    CREATE VIEW sv AS (SELECT UCASE(c1) AS c1 FROM t1)
    ALTER VIEW sv ENABLE QUERY OPTIMIZATION
    RUNSTATS ON TABLE dba.sv WITH DISTRIBUTION

이러한 유형의 쿼리에 대한 통계를 얻으려면, 술어의 한쪽이 통계 뷰 컬럼 정의의 표현식과 정확하게 일치하는 표현식이어야 합니다.

다음은 쿼리 옵티마이저가 통계 뷰의 통계를 사용하지 않는 몇 가지 예입니다.
  • 쿼리에 있는 술어의 한쪽은 통계 뷰에서 둘 이상의 표현식 컬러과 일치하는 표현식입니다.
    create view SV14(c1, c2) as (select c1+c2, c1*c2 from t1 where c1 > 3);
    alter view SV14 enable query optimization;
    runstats on table schema.sv1 with distribution;
    select * from t1 where (c1+c2) + (c1*c2) > 5 and c1 > 3;
    여기서 (c1+c2) + (c1*c2) 표현식은 SV14 뷰의 두 컬럼과 일치합니다. 이 표현식에 대한 뷰 SV14의 통계는 사용되지 않습니다.
  • 쿼리에서 술어의 한쪽은 통계 뷰에 있는 표현식 컬럼과 부분적으로 일치하는 표현식입니다.
    create view SV15(c1, c2) as (select c1+c2, c1*c2 from t1 where c1 > 3);
    alter view SV15 enable query optimization;
    runstats on table schema.SV15 with distribution;
    select * from t1 where (c1+c2) + 10 > 5 and c1 > 3;
    여기서 (c1+c2) + 10 표현식은 SV15 뷰 c1+c2과(와) 부분적으로 일치합니다. 이 표현식에 대한 뷰 SV15의 통계는 사용되지 않습니다.
  • 쿼리에 있는 술어의 한쪽은 통계 뷰에 있는 하나의 표현식 컬럼과 간접적으로 일치합니다.
    create view SV16(c1, c2) as (select c1+c2, c1*c2 from t1 where c1 > 3);
    alter view SV16 enable query optimization;
    runstats on table schema.SV16 with distribution;
    select * from t3 left join table (select ta.c1 from t2 left join table 
      (select c1+c2,c3 from t1 where c1 > 3) as ta(c1,c3) on t2.c1 = ta.c3) as 
       tb(c1) on t3.c1= TB.C1;
    여기서 TB.C1 컬럼은 SV16 뷰의 c1+c2 표현식과 간접적으로 일치합니다. 이 표현식에 대한 뷰 SV16의 통계는 사용되지 않습니다.