집 >데이터 베이스 >MySQL 튜토리얼 >대규모 SQL 데이터베이스 테이블에서 최대값과 해당 데이터를 효율적으로 검색하는 방법은 무엇입니까?
대규모 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>
이 쿼리는 두 단계로 작동합니다.
내부 쿼리: 각 rnk
파티션(동일한 ID를 가진 행 그룹) 내의 각 행에 고유한 순위(ID
)를 할당합니다. 순위는 version
열을 기준으로 내림차순으로 결정됩니다. 즉, 가장 높은 버전이 1위를 차지합니다.
외부 쿼리: rnk = 1
이 있는 행만 선택하여 내부 쿼리의 결과를 필터링합니다. 이는 효과적으로 각 version
에 대해 최대 ID
이 있는 행을 제공합니다.
이 접근 방식은 중첩된 쿼리와 GROUP BY
작업을 방지하여 대규모 데이터 세트의 경우 속도가 훨씬 빨라집니다. ROW_NUMBER()
을 사용하면 원하는 결과를 얻을 수 있는 깔끔하고 효율적인 방법이 제공됩니다.
위 내용은 대규모 SQL 데이터베이스 테이블에서 최대값과 해당 데이터를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!