집 >데이터 베이스 >MySQL 튜토리얼 >SQL의 `IN` 조건이 때때로 `=` 연산자보다 느린 이유는 무엇입니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!