Hash Join Optimization

1. 조인의 각 테이블 쌍이 적어도 하나의 동등 조인 조건을 포함하고 조인 조건에 적용되는 인덱스가 없을 때마다 해시 조인 사용

  • 조인 조건이 지정되지 않은 경우에도 사용 가능

  • EXPLAIN FORMAT=TREE 또는 EXPLAIN ANALYZE를 사용하여 특정 쿼리에 대해 해시 조인 최적화가 언제 사용되는지 확인 가능

  • 해시 조인에 사용할 수 있는 메모리 양은 join_buffer_size 값으로 제한되며 온 디스크 해시 조인에서 사용할 수 있는 디스크 파일 수는 open_files_limit로 제한

  • DBMS에 도입된 hash_join 최적화 스위치가 더 이상 지원되지 않으며, HASH_JOIN 및 NO_HASH_JOIN 옵티마이저 힌트도 더 이상 지원되지 않음

  • NO_BNL 최적화 스위치를 사용하여 해시 조인을 비활성화 가능

  • 블록 중첩 루프가 더 이상 사용되지 않으며 쿼리에 동등 조인 조건이 포함되지 않은 경우에도 해시 조인이 사용

CREATE TABLE t1 (c1 INT, c2 INT);
CREATE TABLE t2 (c1 INT, c2 INT);

SELECT * FROM t1 JOIN t2 WHERE t1.c2 > 50;

/*
EXPLAIN FORMAT=TREE 
-> Inner hash join (no condition)  (cost=0.70 rows=1)
    -> Table scan on t2  (cost=0.35 rows=1)
    -> Hash
        -> Filter: (t1.c2 > 50)  (cost=0.35 rows=1)
            -> Table scan on t1  (cost=0.35 rows=1)
*/

Last updated