티스토리 뷰

Database/Oracle

[오라클] BLOOM FILTER

데브포유 2016. 3. 16. 11:33
반응형

HASH JOIN시 BLOOM FILTER 사용하기.


>> 패턴

-------------------------------------------------------------------------------

SELECT /*+ LEADING(T1) NO_MERGE(V1) PX_JOIN_FILTER(V1) */ 

          T1.PRDT_ID

         ,V1.SALES_AMT

FROM TB_PRDT T1

       ,(

           SELECT PRDT_ID 

                    ,SUM(TRD_AMT) AS SALES_AMT

           FROM TN_TRADE

           GROUP BY PRDT_ID

        ) V1

WHERE T1.PRDT_ID IN (1000, 2000, 3000)

   AND T1.PRDT_ID = V1.PRDT

-------------------------------------------------------------------------------

BLOOM FILTER 필터에 대해서는 조동욱님이 저술하신 오라클성능고도화 책에 잘 설명되어 있음.

HASH 조인시 BLOOM FILETER를 사용하려면 위와 같은 형식의 쿼리가 되어야 함.

붉은색이 중요. 선행테이블에는 필터 조건이 있어야 하고, 후행 테이블은 GROUP BY가 되어야 함.

선행테이블의 필터 조건은 여러건이 있어야 함. 선행집합이 1건 즉 PK로써 T1.PRDT_ID = 1000 으로 

조건을 준다면 BLOOM FILTER는 발생되지 않음.


* BLOOM FILTER 는 FALSE NEGATIVE(부정오류)는 발생하지 않지만 FALSE POSITIVE(긍정오류)는 발생할 수 있다.

즉 필터에 의해서 조인하기 전에 참으로 인식했는데 막상 조인해 보니 아니였다라고 하는 것이 FALSE POSITIVE 이다.

FALSE POSITIVE를 줄이는 것이 BLOOM FILTER를 사용했을 때 최대의 효과를 볼 수 있다.





반응형