> 데이터 베이스 > MySQL 튜토리얼 > INNER JOIN과 LEFT JOIN: 어느 것이 다른 것보다 훨씬 빠른가요?

INNER JOIN과 LEFT JOIN: 어느 것이 다른 것보다 훨씬 빠른가요?

Barbara Streisand
풀어 주다: 2025-01-18 16:33:14
원래의
978명이 탐색했습니다.

INNER JOIN vs. LEFT JOIN: When is One Significantly Faster Than the Other?

SQL Server INNER JOIN과 LEFT JOIN의 성능 차이에 대한 자세한 설명

SQL Server에서는 성능 고려 사항이 쿼리 최적화 결정의 핵심인 경우가 많습니다. 특히 여러 테이블이 포함된 쿼리에서 INNER JOIN 또는 LEFT JOIN 중에서 선택하는 것은 일반적인 질문입니다. 사람들은 종종 LEFT JOIN이 본질적으로 더 빠르다고 생각하지만 항상 그런 것은 아닙니다.

LEFT JOIN이 일반적으로 더 빠르지 않은 이유는 무엇입니까?

LEFT JOIN은 오른쪽 테이블에 일치하는 행이 없더라도 왼쪽 테이블의 모든 행을 검색합니다. 대조적으로, INNER JOIN은 일치하는 항목이 발견된 행만 반환합니다. 이는 LEFT JOIN 자체가 더 많은 작업을 수행하고 더 많은 결과 행을 생성하므로 실행 시간이 길어질 수 있음을 의미합니다.

예외: 언제 LEFT JOIN이 더 빠를 수 있나요?

드물게 특정 요인으로 인해 LEFT JOIN이 INNER JOIN보다 빠를 수 있습니다.

  • 매우 작은 테이블: 관련된 테이블이 매우 작은 경우(예: 10행 미만) 해시 일치(INNER JOIN에서 사용)의 오버헤드가 중첩 루프(사용)의 오버헤드를 초과할 수 있습니다. LEFT JOIN 기준) 비용.
  • 충분한 인덱스 부족: 테이블에 INNER JOIN을 지원하는 데 적합한 인덱스가 부족한 경우 SQL Server는 덜 효율적인 실행 계획을 선택하여 쿼리 속도가 느려질 수 있습니다. 이 경우 LEFT JOIN을 사용하는 중첩 루프가 더 나을 수 있습니다.

다음 예를 고려해 보세요.

<code class="language-sql">CREATE TABLE #Test1 (ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL)
INSERT INTO #Test1 (ID, Name) VALUES (1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')

CREATE TABLE #Test2 (ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL)
INSERT INTO #Test2 (ID, Name) VALUES (1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')

SELECT *
FROM #Test1 t1
INNER JOIN #Test2 t2
ON t2.Name = t1.Name

SELECT *
FROM #Test1 t1
LEFT JOIN #Test2 t2
ON t2.Name = t1.Name

DROP TABLE #Test1
DROP TABLE #Test2</code>
로그인 후 복사

이러한 작은 테이블에서 실행되면 해시 일치 오버헤드가 추가 결과 크기 비용보다 크기 때문에 LEFT JOIN 쿼리가 약간 더 빨라집니다. 그러나 행이 10개보다 많은 대규모 테이블에서는 INNER JOIN 쿼리가 훨씬 빠릅니다.

결론

대부분의 경우 실행 속도 측면에서 INNER JOIN이 LEFT JOIN보다 성능이 좋습니다. 예외는 매우 작은 테이블 및 불충분한 인덱스와 관련된 매우 구체적인 조건으로 제한됩니다. 따라서 단지 성능상의 이유로 INNER JOIN을 LEFT JOIN으로 바꾸는 것보다 잠재적인 성능 병목 현상을 식별하기 위해 쿼리 디자인과 인덱스를 철저하게 검사하는 것이 중요합니다.

위 내용은 INNER JOIN과 LEFT JOIN: 어느 것이 다른 것보다 훨씬 빠른가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿