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