본문 바로가기
CS/Database

RDB Join 방식

by clearinging 2021. 12. 9.
반응형

Join

  • 두 테이블을 합치는 과정
  • 대부분 정규화를 거치게 되면 1:N(OneToMany/ManyToOne), 1:1(OneToOne)관계를 가지게 됩니다.
  • 이런 연관관계를 DB측에서는 relation관계라고 표현합니다.

Join 방식

Nested Loop방식

  • mysql이 많이 사용하는 방식
  • 8.0.18버전 이전에는 mysql 의 유일한 join 방식입니다
  • 먼저 처리될 table(drivinig table)의 row수가 작을 수록 성능적인 이점을 가져갑니다
    • 이유
      • nested loop에서는 index가 없을 경우 2중 for문 처럼 조회 하게 됩니다. 만약 driving table의 row가 커질 수록 outer table의 전체 조회 횟수가 증가 하기 때문입니다.
      • index가 있을 경우 random access 횟수가 증가 하기 때문에 이슈 발생 (index -> driving table random access) * (driving table refrence key -> index -> outer table random access)
  • 다량의 IO가발생 -> random access를하게 되면 block이 memory에 load 되기 때문에 많은 성능이슈가 발생할 수 있습니다.
  • index를 사용해 최대한 좁은 범위의 데이터를 조회할 때 유리합니다.(reference key를 처럼 상요할때 무조건 index를 생성해야지 성능 이득을 취할 수 있습니다.)

Merge Sort 방식

  • 저가 자주 사용하는 mysql은 지원 하지 않습니다.
  • 두 table의 조인 범위 가 넓으며, sort가 필요한 경우 사용합니다.
  • 두 table간에 index가 없을 경우 주로 사용되기도 합니다.
  • 정렬을 위한 memory area size에 따라서 성능이 많이 차이가 나게 됩니다.
  • 두 table를 전체 조회 하기때문에 서버 부하 이슈가 크게 생길 수 있습니다.
  • join연산자가 =이 아닐 경우 유리합니다

Hash Join 방식

  • MySQL은 8.0.18 버전부터 지원합니다
  • 2 table중 작은 table을 hash table을 memory 여역에 생성 join하는 방식입니다
  • 충돌이 최소화 하는 hash 함수를 사용하게되면 성능에 유리 합니다.
  • 충돌이 발생하면 LinkeHashMap형태로 LinkedList형태로 저장합니다.
  • HashTable이 생성된 후에는 nestedLoop 방식처럼 outer table 을 선형적으로 loop를 돌면서 hash table 에 접근해 join 하는 방식을 취합니다
반응형

'CS > Database' 카테고리의 다른 글

RDB Semi Join을 이용한 성능 최적화  (0) 2021.12.12
RDB Index  (0) 2021.12.09
NamingLock을 이용한 동시성 이슈, Deadlock query 이슈 해결  (0) 2021.12.01
DB Isolation  (0) 2021.10.30
Mysql Replication  (3) 2021.10.06