• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

안녕하세요! LEFT JOIN 리트코드 문제풀이 질문있습니다.!

22.09.19 23:34 작성 조회수 164

0

안녕하세요 리트코드 문제를 풀면서 처음에 LEFT조인을 무의식적으로 서브쿼리로 다중 행을 이용해 문제를 풀었습니다.

근데 푸는 와중에 런타임속도에 있어서 갑자기 궁금증이 생겨 질문을 남기게 됐습니다.

제가 (단순하게)생각했을 때는 서브쿼리를 쓰게되면 메인쿼리와 함께 조회를 두 번 도는거라 더 느릴 것 같은데 LEFT조인만 썼을때보다 속도가 빠르게 나와서 두 쿼리의 차이가 있는건지? 아니면 리트코드 컴파일상 그런건지? 왜 이런 결과가 나왔는지 궁금합니다!!!

문득 시험 뿐만 아니라, 실제 현업에 갔을때도 성능을 고려하여 코딩을 하는데 목적을 두고 공부를 하다보니. 갑자기 생각나서 질문 드립니다.

아 저는 MySql이 아닌 Oracle로 공부하고 있습니다.

  1. 기존 풀이 LEFT JOIN

    SELECT c.name "Customers"

    FROM Customers c, Orders o

    WHERE c.id = o.customerId(+)

    AND o.customerId IS NULL;

     

  2. 서브쿼리를 통한 INNER JOIN

    SELECT name "Customers"

    FROM Customers

    WHERE id NOT IN

    (SELECT c.id

    FROM Customers c, Orders o

    WHERE c.id = o.customerId);

     

  3. 두 개의 결과

답변 1

답변을 작성해보세요.

0

일반적으로 INNER JOIN이 LEFT JOIN보다 빠른 연산입니다.

그리고 1번은 LEFT JOIN이 아니라 CROSS JOIN을 쓴 쿼리이고, CROSS JOIN은 LEFT JOIN보다 더 느립니다.
CROSS JOIN을 하면 한 쪽 테이블의 모든 행 하나하나에 다른 쪽 테이블의 모든 행이 전부 붙습니다.
만약 A 테이블이 2개의 row, B 테이블이 10개의 row를 가지고 있다면 CROSS JOIN을 통해 만들어진 테이블은 총 20행이 됩니다.
이런 식으로 작동하기 때문에 연산이 오래 걸릴 수 밖에 없습니다.