집 >데이터 베이스 >MySQL 튜토리얼 >단일 값을 사용하더라도 MySQL 쿼리에서 `IN`이 `=`보다 느린 이유는 무엇입니까?
IN
대 =
성능 불일치문제: IN
연산자를 사용하는 MySQL 쿼리는 =
연산자를 사용하는 쿼리보다 놀라울 정도로 느릴 수 있습니다. IN
이 단일 값과 비교되는 경우에도 마찬가지입니다.
근본 원인: 문제는 MySQL이 IN
절 내의 하위 쿼리를 처리하는 방식에 있습니다. 이전 버전(5.6 이전)에서는 이러한 하위 쿼리를 종속 하위 쿼리
종속 하위 쿼리와 독립 하위 쿼리: 외부 쿼리의 각 행에 대해 종속 하위 쿼리가 다시 실행되어 상당한 성능 오버헤드가 발생합니다. 독립 하위 쿼리는 한 번만 실행됩니다. MySQL의 이전 버전에서는 단일 값을 반환하는 경우에도 IN
하위 쿼리를 종속 쿼리로 잘못 처리했습니다.
설명 분석: EXPLAIN
명령을 사용하면 이 동작이 드러납니다. 하위 쿼리가 포함된 IN
쿼리는 실행 계획에 "DEPENDENT SUBQUERY"가 표시되는 반면, =
을 사용하는 동일한 쿼리는 "SUBQUERY"가 표시됩니다.
예제 EXPLAIN
출력(문제 표시):
<code>1 'PRIMARY' 'question_law_version' 'ALL' '' '' '' '' 10148 'Using where' 2 'DEPENDENT SUBQUERY' 'question_law_version' 'ALL' '' '' '' '' 10148 'Using where' 3 'DEPENDENT SUBQUERY' 'question_law' 'ALL' '' '' '' '' 10040 'Using where'</code>
예제 EXPLAIN
출력(=
문제를 해결한 후):
<code>1 'PRIMARY' 'question_law_version' 'ALL' '' '' '' '' 10148 'Using where' 2 'SUBQUERY' 'question_law_version' 'ALL' '' '' '' '' 10148 'Using where' 3 'SUBQUERY' 'question_law' 'ALL' '' '' '' '' 10040 'Using where'</code>
예시:
이 간단한 쿼리는 문제를 보여줍니다.
<code class="language-sql">SELECT id FROM foo WHERE id IN (SELECT MAX(foo_id) FROM bar);</code>
하위 쿼리에서 반환된 단일 값이 있어도 종속 쿼리로 처리되어 실행 속도가 느려집니다. IN
을 =
로 바꾸면 성능이 크게 향상됩니다.
해결책:
성능 문제는 MySQL 5.6 이상 버전에서 해결되었습니다. 최신 버전으로 업그레이드하면 이러한 불일치가 해결됩니다. 업그레이드가 불가능할 경우 IN
를 방지하기 위해 하위 쿼리(예: 조인 사용)를 사용하여 쿼리를 다시 작성하는 것이 해결 방법이 될 수 있습니다.
위 내용은 단일 값을 사용하더라도 MySQL 쿼리에서 `IN`이 `=`보다 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!