> 데이터 베이스 > MySQL 튜토리얼 > WHERE IN에 하위 쿼리가 포함된 MySQL 쿼리가 왜 이렇게 느린가요?

WHERE IN에 하위 쿼리가 포함된 MySQL 쿼리가 왜 이렇게 느린가요?

Linda Hamilton
풀어 주다: 2024-11-15 15:54:03
원래의
481명이 탐색했습니다.

Why is My MySQL Query with a Subquery in WHERE IN So Slow?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿