>데이터 베이스 >MySQL 튜토리얼 >SQL의 `IN` 조건이 때때로 `=` 연산자보다 느린 이유는 무엇입니까?

SQL의 `IN` 조건이 때때로 `=` 연산자보다 느린 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-16 17:13:08156검색

Why is SQL's `IN` Condition Sometimes Slower Than the `=` Operator?

SQL의 IN 조건: =

대비 성능 문제

특정 상황에서는 SQL의 IN 조건이 = 연산자에 비해 성능이 크게 저하될 수 있습니다. 이는 이전 MySQL 버전에서 주목할만한 문제였지만 이후 버전(MySQL 5.6 이상)에서는 이 문제가 해결되었습니다.

성능 차이는 최적화 문제에서 비롯됩니다. IN 절 내의 하위 쿼리가 독립이 아닌 종속으로 잘못 식별될 수 있습니다. 이로 인해 기본 쿼리의 각 행에 대해 하위 쿼리가 반복 실행되어 성능에 큰 영향을 미칩니다.

예를 살펴보겠습니다.

<code class="language-sql">SELECT * FROM question_law_version
WHERE question_law_id IN (
    SELECT MAX(foo_id)
    FROM bar
);</code>

이 쿼리에 대한 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>

"DEPENDENT SUBQUERY" 지정을 확인하세요. 내부 쿼리가 반복적으로 실행됩니다. 그러나 =을 사용하여 쿼리를 다시 작성합니다(하위 쿼리가 단일 값을 반환한다고 가정).

<code class="language-sql">SELECT * FROM question_law_version
WHERE question_law_id = (
    SELECT MAX(foo_id)
    FROM bar
);</code>

...더 효율적인 계획이 되는 경우가 많습니다.

<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>

주요 차이점은 단일 실행을 나타내는 "SUBQUERY" 분류입니다. 이러한 성능 불일치는 IN 절의 하위 쿼리 종속성에 대한 MySQL(이전 버전)의 잘못된 해석으로 인해 발생합니다. 이를 데이터베이스가 비효율적으로 처리하면 성능 저하가 발생합니다.

위 내용은 SQL의 `IN` 조건이 때때로 `=` 연산자보다 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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