WHERE IN의 하위 쿼리로 인한 MySQL 성능 저하
MySQL 데이터베이스에서 중복 행을 식별하고 검사하려고 하면 단순해 보이는 쿼리 결과가 나타납니다. 예기치 않게 성능이 저하되었습니다. 'relevant_field' 열에 중복된 값이 있는 모든 행을 선택하기 위한 초기 쿼리는 다음 구조를 사용했습니다.
SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1
이 쿼리는 빠르게 실행되었지만 후속 쿼리가 구성되어 관련_필드의 모든 행을 검색했습니다. 'relevant_field' 값이 첫 번째 쿼리의 값과 일치하는 'some_table'의 경우 성능이 크게 떨어졌습니다.
SELECT * FROM some_table WHERE relevant_field IN ( SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1 )
상관 쿼리인 하위 쿼리의 특성으로 인해 성능이 저하될 수 있습니다. 이 경우 메인 쿼리가 처리한 행마다 서브 쿼리를 실행하게 되므로 오버헤드가 과도하게 발생하게 됩니다.
이러한 성능 문제를 완화하려면 다음을 선택하여 상관 서브 쿼리를 비상관 서브 쿼리로 변환하는 것이 좋습니다.
SELECT * FROM ( SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1 ) AS subquery
이번 수정을 통해 기본 쿼리의 성능이 크게 향상되었습니다.
SELECT * FROM some_table WHERE relevant_field IN ( SELECT * FROM ( SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1 ) AS subquery )
수정된 이 쿼리는 MySQL의 최적화 기능을 활용하여 중복 항목을 효율적으로 검색합니다. 원래 상관 하위 쿼리와 관련된 성능 저하가 없는 행.
위 내용은 WHERE IN에 하위 쿼리가 포함된 MySQL 쿼리가 왜 이렇게 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!