[요약 질문 : 2 개의 SQL 문은 동일한 결과를 보여 주지만 속도는 다릅니다. 하나의 문은 JOIN
을 사용하고 다른 문은 IN
을 사용합니다. JOIN
내가 booking_record 및 흠 이름,이 개 테이블에 SELECT
문의 2 종류의 시도 빠른MySQL (버전 5.5) : 왜`JOIN`이`IN` 절보다 더 빠릅니까?
] IN
보다. 테이블 포함은 테이블과 many-to-one 관계가 있습니다. 예약 _record.
(표 정의는 간단하게하기 위해 포함되어 있지 않습니다.)
첫 번째 문 : (사용 IN
절)
SELECT
id,
agent,
source
FROM
booking_record
WHERE
id IN
(SELECT DISTINCT
foreign_key_booking_record
FROM
inclusions
WHERE
foreign_key_bill IS NULL
AND
invoice_closure <> FALSE
)
두 번째 문 : 300,000 행 (JOIN
사용)
SELECT
id,
agent,
source
FROM
booking_record
JOIN
(SELECT DISTINCT
foreign_key_booking_record
FROM
inclusions
WHERE
foreign_key_bill IS NULL
AND
invoice_closure <> FALSE
) inclusions
ON
id = foreign_key_booking_record
에 예약 _record 테이블 가능 및 6,100,000+ 행 포함 내 용 표; 두 번째 성명서는 0.08 초 만에 127 개의 행을 전달했지만 첫 번째 성명서는 동일한 기록으로 거의 21 분이 걸렸습니다.
왜 JOIN
이 IN
절보다 훨씬 빠릅니까? 내가 가지고있는 경우
나는 당신이 두 문장에'EXPLAIN'를 사용하여 그 결과를 보면이 질문을 탐구하기 시작하는 것이 좋습니다. –
두 번째 필터에는'id = foreign_key_booking_record' 필터가 하나 더 있습니다. –
성능 차이에 대한 가장 일반적인 설명은 생성 된 실행 계획의 차이입니다. 다른 대답이 이미 표시되었으므로,'EXPLAIN'의 결과는 각 쿼리에 대한 실행 계획을 보여줍니다. 'IN (subquery)'에 대한 하나의 큰 성능 문제 : MySQL이 외부 쿼리에 의해 반환 된 모든 행에 대해 해당 하위 쿼리를 실행하고있을 가능성이 있습니다. – spencer7593