>데이터 베이스 >MySQL 튜토리얼 >SQL에서 최대값과 해당 데이터를 효율적으로 검색하려면 어떻게 해야 합니까?

SQL에서 최대값과 해당 데이터를 효율적으로 검색하려면 어떻게 해야 합니까?

DDD
DDD원래의
2025-01-07 17:17:09327검색

How Can I Efficiently Retrieve Maximum Values and Corresponding Data in SQL?

SQL 쿼리 최적화: 최대값 및 관련 데이터 검색

이 문서에서는 대규모 SQL 테이블에서 각 ID 및 해당 태그의 최대 버전 번호를 검색하는 효율적인 방법을 보여줍니다. 중첩 쿼리나 단순 그룹화와 같이 효율성이 떨어지는 방법은 피하세요.

최적의 솔루션은 ROW_NUMBER() 기능을 사용합니다:

<code class="language-sql">SELECT s.id, s.tag, s.version
FROM (
    SELECT t.*,
           ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk
    FROM YourTable t
) s
WHERE s.rnk = 1;</code>

이 쿼리의 작동 방식은 다음과 같습니다.

  • 내부 쿼리: t.*의 모든 열(YourTable)을 선택합니다(YourTable를 실제 테이블 이름으로 바꿉니다). 결정적으로 각 rnk 파티션 내의 각 행에 id 기준으로 내림차순으로 순위(version)를 할당합니다. 각 version의 가장 높은 id은 1위를 받습니다.
  • 외부 쿼리: rnk = 1인 행만 선택하여 내부 쿼리 결과를 필터링합니다. 이는 각 고유 version에 대해 최대 id 및 관련 tagid을 효율적으로 분리합니다.

ROW_NUMBER()을 사용하면 특히 대규모 데이터 세트의 경우 대체 접근 방식에 비해 성능이 크게 향상됩니다. 중첩된 쿼리 또는 집계 함수가 있는 GROUP BY 절의 성능 오버헤드를 방지하므로 이 시나리오에서 효율적인 데이터 검색을 위해 선호되는 방법입니다.

위 내용은 SQL에서 최대값과 해당 데이터를 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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