programing

조합 또는 가입 사용 - 더 빠른 것

newsource 2023. 11. 6. 21:52

조합 또는 가입 사용 - 더 빠른 것

테이블이 있는지 궁금할 뿐인데, 결합을 하셨다면 결합을 하시는 것이 결합을 하는 것보다 더 효율적이실까요?

조인이 더 많은 열을 생성한다는 것은 알지만 이것이 더 이론적입니다. 조인이 해야 하는 것처럼 다른 테이블에 대한 중첩 루프 스캔을 조합에서 수행해야 하는 것처럼 다른 테이블에 대해 중첩 루프 스캔을 수행해야 합니까?

Union은 첫 번째 SELECT 문을 간단히 통과한 다음 두 번째 SELECT 문을 파싱하고 결과를 출력 테이블의 끝에 추가하기 때문에 더 빠릅니다.

조인은 두 테이블의 각 행을 거치며 다른 테이블에서 일치하는 항목을 찾습니다. 따라서 각 행과 모든 행에 대해 일치하는 행을 검색하기 때문에 훨씬 더 많은 처리가 필요합니다.

편집

유니언, 제 말은 유니언 올이 당신이 달성하려는 것에 적합해 보였기 때문입니다.일반적으로 일반적인 연합이 가입보다 빠릅니다.

EDIT 2 (@seebiscuit의 코멘트에 응답)

저는 그의 의견에 동의하지 않습니다.엄밀히 말하면, 아무리 좋은 가입자라도 "JOIN"은 여전히 순수한 연결보다 더 비쌉니다.블로그 코드로 증명하려고 블로그에 글을 올렸습니다.PERF[도트]넷실제로는 완전히 다른 두 가지 목적에 도움이 되며 색인 작업이 올바른지 확인하고 작업에 적합한 도구를 사용하는 것이 더 중요합니다.

엄밀히 말하면, 제 블로그 포스트에서 가져온 다음 두 가지 실행 계획을 사용하여 요약할 수 있다고 생각합니다.

UNION ALL실행계획

UNION ALL Execution Plan

JOIN실행계획

JOIN Execution Plan

실무결과

클러스터 인덱스 룩업에 대한 차이는 실질적으로 무시할 수 있습니다.

Benchmark Results

JOIN그리고.UNION두 가지 목적이 있습니다.JOIN선택 기준 및 추가 열을 추가하기 위해 쿼리에 추가 테이블을 추가하는 데 사용됩니다.UNION두 개의 서로 다른 쿼리의 결과를 동일한 열로 결합하는 데 사용됩니다.어떤 것이 더 효율적인지 묻는 것은 "빵 한 덩어리"와 "바람 부는" 중 어떤 것이 더 "오렌지"인지 묻는 것과 같습니다.

파티를 망쳐서 미안하지만, 잘 작성된 가입이 조합보다 빠를 겁니다.

  • 더 가벼운 통계 수집 모델을 사용합니다(랜덤 다이브가 아닌 카디널리티 기준).
  • 쿼리는 한 번만 구문 분석됩니다(여러 개의 하위 선택 평가 필요 없음).
  • 결과 집합은 유혹적으로 실현되지 않습니다(UNION ALL에 대해서도 균등해집니다).

단일 SELECT는 테이블당 하나의 인덱스만 사용합니다.UNION은 UNION에서 SELECT당 하나의 인덱스를 사용할 수 없습니다.

UNION은 더 빠른 질의 결과를 가져올 수 있는 인덱스를 더 잘 활용할 것입니다.

언급URL : https://stackoverflow.com/questions/2309936/use-a-union-or-a-join-what-is-faster