>데이터 베이스 >MySQL 튜토리얼 >대규모 SQL 데이터베이스 테이블에서 최대값과 해당 데이터를 효율적으로 검색하는 방법은 무엇입니까?

대규모 SQL 데이터베이스 테이블에서 최대값과 해당 데이터를 효율적으로 검색하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-07 17:21:41700검색

How to Efficiently Retrieve the Maximum Value and Corresponding Data from a Large SQL Database Table?

대규모 SQL 테이블에서 효율적으로 최대값 및 관련 데이터 찾기

데이터베이스 쿼리를 수행하려면 열에서 최대값을 찾고 동일한 행 내의 다른 열에서 해당 데이터를 검색해야 하는 경우가 많습니다. 이는 매우 큰 데이터 세트의 경우 특히 어렵습니다. 관련 태그와 함께 각 고유 ID의 가장 높은 버전 번호를 찾아야 하는 테이블을 생각해 보세요.

샘플 테이블:

<code>ID  |  tag  |  version
-----+-----+-----
1 |  A  |  10
2 |  A  |  20
3 |  B  |  99
4 |  C  |  30
5 |  F  |  40</code>

원하는 결과:

<code>ID  |  tag  |  version
-----+-----+-----
2  |  A  |  20
3  |  B  |  99
4  |  C  |  30
5  |  F  |  40</code>

행이 약 2,800만 개 있는 테이블의 경우 중첩된 SELECT 문이나 GROUP BY이 포함된 간단한 MAX과 같은 표준 방법은 엄청나게 느릴 수 있습니다. 훨씬 더 효율적인 솔루션은 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>

이 쿼리는 두 단계로 작동합니다.

  1. 내부 쿼리:rnk 파티션(동일한 ID를 가진 행 그룹) 내의 각 행에 고유한 순위(ID)를 할당합니다. 순위는 version 열을 기준으로 내림차순으로 결정됩니다. 즉, 가장 높은 버전이 1위를 차지합니다.

  2. 외부 쿼리: rnk = 1이 있는 행만 선택하여 내부 쿼리의 결과를 필터링합니다. 이는 효과적으로 각 version에 대해 최대 ID이 있는 행을 제공합니다.

이 접근 방식은 중첩된 쿼리와 GROUP BY 작업을 방지하여 대규모 데이터 세트의 경우 속도가 훨씬 빨라집니다. ROW_NUMBER()을 사용하면 원하는 결과를 얻을 수 있는 깔끔하고 효율적인 방법이 제공됩니다.

위 내용은 대규모 SQL 데이터베이스 테이블에서 최대값과 해당 데이터를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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