>  기사  >  데이터 베이스  >  MySQL에서 WHERE 절의 하위 쿼리를 사용하는 것이 왜 이렇게 느린가요?

MySQL에서 WHERE 절의 하위 쿼리를 사용하는 것이 왜 이렇게 느린가요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-22 16:09:11606검색

Why Is Using a Subquery in the WHERE Clause So Slow in MySQL?

MySQL 성능에 미치는 영향: WHERE 절의 하위 쿼리

중복 데이터를 처리할 때는 문제가 되는 행을 식별하고 검사해야 합니다. 그러나 WHERE 절에 하위 쿼리를 사용하는 간단한 쿼리는 심각한 성능 문제가 발생할 수 있습니다.

원래 쿼리:

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 절의 하위 쿼리에 의존하는 쿼리 속도를 크게 향상시킬 수 있습니다.

위 내용은 MySQL에서 WHERE 절의 하위 쿼리를 사용하는 것이 왜 이렇게 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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