>데이터 베이스 >MySQL 튜토리얼 >IN 절의 MySQL 하위 쿼리가 성능 문제를 일으키는 이유는 무엇입니까?

IN 절의 MySQL 하위 쿼리가 성능 문제를 일으키는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-29 05:22:25663검색

Why is my MySQL subquery in an IN clause causing performance issues?

MySQL - 하위 쿼리 상관관계로 인해 IN 절 성능이 저하됨

주어진 쿼리는 하위 쿼리를 사용하여 데이터베이스 테이블에서 중복 행을 식별합니다. IN 절에 심각한 성능 문제가 발생했습니다. 하위 쿼리 자체는 빠르게 실행되지만 IN 절 쿼리는 상당히 오랜 시간이 걸립니다.

느린 이유

느린 현상은 하위 쿼리의 상관 특성으로 인해 발생합니다. 상관 쿼리에서 하위 쿼리는 외부 쿼리의 열을 참조하므로 외부 쿼리 실행에 종속됩니다. 결과적으로 외부 테이블의 각 행은 별도의 하위 쿼리 실행을 트리거합니다.

해결 방법

문제를 해결하려면 상관 하위 쿼리를 상관되지 않은 하위 쿼리에 포함된 모든 열을 선택하여 쿼리합니다. 이렇게 하면 외부 쿼리에 대한 종속성이 제거되어 성능이 크게 향상됩니다.

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
)

이 비상관 쿼리는 원래 상관 쿼리보다 훨씬 빠르게 실행됩니다.

위 내용은 IN 절의 MySQL 하위 쿼리가 성능 문제를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.