>데이터 베이스 >MySQL 튜토리얼 >조인 수를 줄여 쿼리 성능을 최적화하려면 어떻게 해야 합니까?

조인 수를 줄여 쿼리 성능을 최적화하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-08 21:40:11305검색

How Can We Optimize Query Performance by Reducing Join Count?

최적화된 쿼리 성능을 위한 조인 수 감소

데이터베이스 최적화에서는 쿼리 속도를 높이려면 조인 작업을 최소화하는 것이 중요합니다. 이 원칙은 각 조인이 단순히 쿼리 비용을 추가하는 것이 아니라 쿼리 비용을 곱한다는 것을 나타냅니다. 이 개념을 설명하기 위해 특정 문제를 자세히 살펴보고 더 적은 수의 조인을 사용하는 대체 솔루션을 탐색해 보겠습니다.

조인 결과 계산 쿼리

필요한 시나리오를 생각해 보세요. 세 개의 별도 조인으로 인한 행 수를 계산하려면:

  • album to pays_album
  • album to pers_album
  • album to juron_album

일반적으로 간단한 접근 방식에는 각각 조인과 카운트를 수행하는 세 개의 하위 쿼리가 포함됩니다.

-- Subquery 1
SELECT COUNT(*)
FROM album alb
LEFT JOIN pays_album payalb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"

-- Subquery 2
SELECT COUNT(*)
FROM album alb
LEFT JOIN pers_album peralb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"

-- Subquery 3
SELECT COUNT(*)
FROM album alb
LEFT JOIN juron_album juralb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"

그러나 동일한 결과를 얻는 것도 가능합니다. 단일 쿼리를 사용한 결과:

SELECT alb.titreAlb AS "Titre",
       COUNT(DISTINCT payalb.idAlb, payalb.PrimaryKeyFields) AS "Pays",
       COUNT(DISTINCT peralb.idAlb, peralb.PrimaryKeyFields) AS "Personnages",
       COUNT(DISTINCT juralb.idAlb, juralb.PrimaryKeyFields) AS "Jurons"
FROM album alb
LEFT JOIN pays_album payalb USING ( idAlb )
LEFT JOIN pers_album peralb USING ( idAlb )
LEFT JOIN juron_album juralb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"
GROUP BY alb.titreAlb

DISTINCT 키워드를 활용하면 추가 조인이 개수에 미치는 영향이 무효화됩니다. 이 접근 방식은 성능 이점이 최적의 인덱스 가용성에 달려 있지만 조인을 최소화하는 원래 개념을 효과적으로 모방합니다. 그럼에도 불구하고 이는 고려할 가치가 있는 실행 가능한 대안을 제공합니다.

위 내용은 조인 수를 줄여 쿼리 성능을 최적화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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