inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실무에서 바로 쓰는 SQL튜닝 45가지

튜닝예제38. 서브쿼리문 튜닝5. IN 연산자를 EXISTS 로 변경하여 성능 최적화하기

그 EXISTS의 힌트절에 NESTED LOOP를 쓰는이유 질문

128

c신승호

작성한 질문수 6

0

EXISTS 힌트절에 NL_SJ을 써야한다고 말씀하셨는데 이게 EXISTS 자체가 하나씩 상관 서브 쿼리에 사용이 되기 때문에 NL_SJ를 써야한다는 거죠?

 

IN 같은 경우는 독립적으로 실행이 가능하기 떄문에 HASH_SJ가 유리한거구요?

sql oracle 데이터-엔지니어링

답변 2

0

코딩 대한민국

네, 맞습니다. 질문하신 논리적인 접근이 정확합니다.

기본적으로 EXISTS는 메인 쿼리의 건별로 값을 확인하는 상호연관(Correlated) 특성이 있어 NL 조인의 매커니즘과 유사하고, IN은 독립적인 집합을 먼저 구성하는 성격이라 HASH 조인과 잘 어울리는 것이 사실입니다.

다만 실무 튜닝 관점에서 조금 더 덧붙이자면, 옵티마이저가 서브쿼리를 일반 조인으로 변환(Unnesting)하고 나면 문법보다는 '데이터의 양'과 '인덱스 유무'가 더 중요해집니다. 따라서 EXISTS라도 대용량 처리가 필요하면 HASH_SJ가 유리할 수 있으며, 제가 NL_SJ를 쓴 이유는 문법 때문이라기보다 인덱스를 타고 빠르게 응답을 줘야 하는 상황을 가정했기 때문입니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. c신승호님.

EXISTS 절과 관련된 힌트 사용에 대해 질문 주셨네요. EXISTS 절에서 NL_SJ(Nested Loop Semi-Join) 힌트를 사용하는 이유는 정확히 말씀하신 대로입니다. 하나씩 상관 서브 쿼리에 활용되기 때문에, NESTED LOOP 방식이 적합합니다.

  1. EXISTS와 NL_SJ:

    • EXISTS는 상관 서브쿼리로, 외부 쿼리의 각 행에 대해 내부 쿼리가 반복적으로 실행됩니다. 이런 연산은 일반적으로 NESTED LOOP와 결합이 잘 되며, NL_SJ 힌트를 사용하면 NESTED LOOP 기반으로 처리할 수 있습니다.
  2. IN과 HASH_SJ:

    • 반면, IN절은 독립적으로 실행 가능하여, HASH JOIN이나 블록 기반의 접근 방식이 더 효과적일 수 있습니다. 이 경우 HASH_SJ 힌트를 주면 효율성을 높일 수 있습니다. HASH JOIN은 큰 데이터 그룹에 대해 비교적 빠른 성능을 제공할 수 있습니다.

관련된 내용을 더 깊이 이해하시려면, 다음 게시물을 참고하면 도움이 될 것입니다:
- “SQL 튜닝에서 Nested Loop와 Hash Join의 차이점 이해하기”

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

supabase url, key 값 확인방법

1

11

3

조인의 특징

0

12

1

MLOps Engineer가 되려면 뭘 쌓아가야 할까요?

1

22

2

노션 링크 좀 열어주세요

0

13

1

1-2 battle 테이블 설정 질문 있습니다.

0

12

1

Failed to fetch

0

10

1

12강 집계 함수 8번 연습문제 질문

0

21

1

통계정보 갱신 질문

0

27

1

PK 관련하여 궁금한 점이 있어서 질문 드립니다.

0

21

1

탐색을 한번 더 하지 않게 하는 방식 중 어댑티브 해시 방식도 맞는지 궁금 합니다.

0

18

1

6-5 질문 있습니다!

0

30

3

누락된 소스코드가 있는 것 같아서 공유합니다.

0

16

1

차트시트 발송이 안되는 이유는 무엇일까요?

0

15

2

인덱스 관리 기준관하여

0

53

2

다른 디비관련

0

50

2

21c 버전으로 해도 무방한가요?

0

60

3

함수기반 인덱스

0

82

3

날짜 인덱스관련 질문

0

50

1

복합인덱스 확인법

0

39

0

GROUP BY 시 인덱스를 타지 않는 이유가 궁금합니다

0

58

1

맥북용 자료 부탁드립니다.

0

76

2

어우 옵티마이저가 뛰어난건지..

0

82

1

안녕하세요 NESTED LOOP 문제에서

0

108

2

Buffers와 TotalCost / cpu_cost / io_cost 의 차이점?

0

124

2