하위 쿼리와 명시적 값 "IN" 쿼리 간의 성능 차이
MySQL "IN" 쿼리가 하위 쿼리를 사용할 때 쿼리보다 훨씬 느린 이유는 무엇입니까? 명시적 값을 사용하는 경우?
다음 쿼리를 고려하십시오.
<code class="sql">SELECT COUNT(DISTINCT subscriberid) FROM em_link_data WHERE linkid IN (SELECT l.id FROM em_link l WHERE l.campaignid = '2900' AND l.link != 'open')</code>
하위 쿼리만 1ms 이내에 완료된다는 사실에도 불구하고 이 쿼리를 실행하는 데 약 18초가 걸립니다.
그러나 하위 쿼리가 명시적인 값으로 대체되는 경우:
<code class="sql">SELECT COUNT(DISTINCT subscriberid) FROM em_link_data WHERE linkid IN (24899,24900,24901,24902);</code>
쿼리는 1밀리초 이내에 완료됩니다.
설명
성능 불일치는 MySQL이 하위 쿼리를 평가하는 방식에서 발생합니다. 하위 쿼리는 발생할 때마다 실행됩니다. 즉, 첫 번째 쿼리에서 MySQL은 기본적으로 700만 개의 쿼리를 실행합니다("em_link_data" 테이블의 각 행에 대한 하위 쿼리 평가). 반면 명시적 값을 사용하는 경우 하위 쿼리는 한 번만 평가됩니다.
해결 방법
JOIN을 사용하여 쿼리를 다시 작성할 수 없는 경우 다음을 사용하는 것을 고려할 수 있습니다. 성능 향상을 위한 쿼리 캐시. 쿼리 캐시는 이전에 실행된 쿼리의 결과를 저장하고, 동일한 쿼리가 다시 실행되면 이를 재사용합니다. 이렇게 하면 하위 쿼리가 많은 쿼리의 실행 시간을 크게 줄일 수 있습니다.
쿼리 캐시를 활성화하려면 MySQL 구성 파일에 다음 줄을 추가하세요.
query_cache_type = 1
변경 사항을 적용하려면 MySQL을 다시 시작하세요. 적용됩니다.
위 내용은 하위 쿼리가 포함된 MySQL \'IN\' 쿼리가 명시적 값을 사용하는 것보다 훨씬 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!