>  기사  >  데이터 베이스  >  내 WHERE IN(하위 쿼리) 쿼리는 느리지만 하위 쿼리에서 뷰를 참조하는 것은 빠른 이유는 무엇입니까?

내 WHERE IN(하위 쿼리) 쿼리는 느리지만 하위 쿼리에서 뷰를 참조하는 것은 빠른 이유는 무엇입니까?

DDD
DDD원래의
2024-11-19 21:40:03433검색

Why is my WHERE IN (subquery) query slow, but referencing a view from the subquery is fast?

MySQL 성능 수수께끼: 하위 쿼리 성능 이상

데이터베이스에서 중복 레코드를 검색하려고 할 때 하위 쿼리를 활용하는 SQL 쿼리는 해당 행은 놀라운 성능 차이를 보였습니다.

특정 필드를 그룹화하고 필터링하여 중복 레코드를 효과적으로 격리하는 초기 쿼리가 신속하게 실행되었습니다. 그러나 중복 집합의 값과 일치하는 모든 행을 검색하려는 후속 쿼리(WHERE ... IN(하위 쿼리) 구성을 사용하여 수행됨)는 엄청나게 느려졌습니다.

관련 필드에서는 실행을 완료하는 데 몇 분이 걸렸습니다. 데이터베이스 제한이 의심되어 하위 쿼리에서 뷰가 생성되었으며 대신 해당 뷰를 참조하도록 상위 쿼리가 수정되었습니다. 이로 인해 거의 즉각적인 실행이 이루어졌습니다.

범인 공개: 상관 쿼리 문제

조사 결과, 느린 성능은 쿼리의 상관 특성에서 비롯된 것으로 밝혀졌습니다. 하위 쿼리. 상관 하위 쿼리에서는 내부 쿼리가 외부 쿼리의 필드를 참조하므로 외부 쿼리의 각 행에 대해 하위 쿼리가 여러 번 실행되어 효율성이 저하됩니다.

병목 현상 해결: 격리 하위 쿼리

성능 저하를 완화하기 위해 하위 쿼리에서 모든 열을 선택하고 별칭을 할당하여 상관 하위 쿼리를 비상관 하위 쿼리로 변환했습니다. 이를 통해 하위 쿼리가 한 번만 실행되도록 보장하여 쿼리 성능이 크게 향상되었습니다.

이제 상관되지 않은 하위 쿼리 결과를 참조하는 수정된 상위 쿼리가 원하는 효율성으로 실행되어 성능 문제를 해결했습니다.

위 내용은 내 WHERE IN(하위 쿼리) 쿼리는 느리지만 하위 쿼리에서 뷰를 참조하는 것은 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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