집 >데이터 베이스 >MySQL 튜토리얼 >단일 SQL 테이블에서 그룹당 최대값을 효율적으로 검색하려면 어떻게 해야 합니까?
그룹별 최대 값 검색을 위한 SQL 쿼리 최적화
대규모 SQL 테이블을 작업할 때는 효율적인 데이터 검색이 무엇보다 중요합니다. 자주 수행되는 작업에는 특정 행 그룹 내의 최대값을 식별하는 작업이 포함됩니다. 이 문서에서는 여러 테이블 스캔을 피하면서 이를 효율적으로 달성하기 위한 최적화된 SQL 쿼리를 보여줍니다.
SCORES
, ID
및 ROUND
열이 있는 SCORE
테이블을 생각해 보겠습니다. 목표는 각 ROUND
및 해당 ID
에 대해 최대 SCORE
를 얻는 것입니다. 반복 처리를 포함하는 비효율적인 방법은 대규모 데이터세트에 적합하지 않습니다.
다음 쿼리는 최적의 성능을 위해 창 기능과 DISTINCT
을 사용합니다.
<code class="language-sql">SELECT DISTINCT id ,max(round) OVER (PARTITION BY id) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;</code>
이 접근 방식은 창 함수를 사용하여 각 ROUND
그룹 내의 최대 SCORE
및 해당 ID
을 계산합니다. 그런 다음 DISTINCT
절은 중복 행을 제거하여 ROUND
당 가장 높은 ID
만 반환되도록 합니다. 이는 여러 테이블을 스캔하는 것에 비해 처리 시간을 크게 줄여줍니다.
동일하게 효과적인 대안 방법은 FIRST_VALUE
을 두 번 사용하는 것입니다.
<code class="language-sql">SELECT DISTINCT id ,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;</code>
두 쿼리 모두 동일한 결과를 산출합니다.
ID | ROUND | SCORE |
---|---|---|
1 | 3 | 2 |
2 | 2 | 12 |
3 | 1 | 6 |
이러한 최적화된 쿼리는 단일 테이블 스캔에서 그룹당 최대값을 검색하여 덜 효율적인 방법에 비해 상당한 성능 향상을 제공합니다. 이는 대규모 데이터 세트를 처리할 때 응답성을 유지하는 데 중요합니다.
위 내용은 단일 SQL 테이블에서 그룹당 최대값을 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!