"IN" 대 명시적 값을 사용한 느린 MySQL 쿼리
MySQL에서 "IN" 연산자를 함께 사용하면 상당한 성능 저하가 발생할 수 있습니다. 명시적인 값을 사용하면 신속하게 수행되지만 하위 쿼리를 사용합니다.
문제
다음 MySQL 쿼리를 고려하세요.
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')
하위 쿼리와 열 인덱싱을 수행하는 경우 이 쿼리를 실행하는 데 약 18초가 걸립니다. 그러나 하위 쿼리 결과를 명시적 값으로 대체하면 쿼리 속도가 크게 향상되어 1밀리초 이내에 완료됩니다.
SELECT COUNT(DISTINCT subscriberid) FROM em_link_data WHERE linkid in (24899,24900,24901,24902);
추론
성능 차이는 하위 쿼리의 행동. MySQL에서는 하위 쿼리가 참조될 때마다 평가됩니다. 따라서 원래 쿼리는 하위 쿼리를 약 700만 번 실행하므로 성능이 저하됩니다.
해결 방법
이 문제를 해결하려면 하위 쿼리 대신 JOIN을 사용하는 것이 좋습니다. :
SELECT COUNT(DISTINCT subscriberid) FROM em_link_data INNER JOIN em_link l ON em_link_data.linkid = l.id WHERE l.campaignid = '2900' AND l.link != 'open'
이 접근 방식은 단일 쿼리를 실행하여 성능을 크게 향상시킵니다.
위 내용은 하위 쿼리와 함께 \'IN\'을 사용하면 MySQL 쿼리 속도가 느려지지만 명시적 값을 사용할 때는 그렇지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!