>데이터 베이스 >MySQL 튜토리얼 >단일 값을 사용하더라도 MySQL 쿼리에서 `IN`이 `=`보다 느린 이유는 무엇입니까?

단일 값을 사용하더라도 MySQL 쿼리에서 `IN`이 `=`보다 느린 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-16 17:06:13382검색

Why is `IN` slower than `=` in MySQL queries, even with a single value?

MySQL의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.