"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 대형 SQL 데이터베이스 테이블에서 최대 값과 해당 데이터 방법을 효율적으로 얻습니다.

대형 SQL 데이터베이스 테이블에서 최대 값과 해당 데이터 방법을 효율적으로 얻습니다.

2025-04-21에 게시되었습니다
검색:530

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

대형 SQL 테이블에서 최대 값과 관련 데이터를 효율적으로 찾는다

종종 데이터베이스 쿼리는 열에서 최대 값을 찾고 동일한 행 내 다른 열에서 해당 데이터를 검색해야합니다. 이것은 매우 큰 데이터 세트에서 특히 도전적입니다. 관련 태그와 함께 각 고유 ID에 대해 가장 높은 버전 번호를 찾아야하는 테이블을 고려하십시오.

샘플 테이블 :

ID  |  tag  |  version
----- ----- -----
1 |  A  |  10
2 |  A  |  20
3 |  B  |  99
4 |  C  |  30
5 |  F  |  40

원하는 결과 :

ID  |  tag  |  version
----- ----- -----
2  |  A  |  20
3  |  B  |  99
4  |  C  |  30
5  |  F  |  40

약 2,800 만 행을 가진 테이블의 경우 문자를 선택하거나 max 가있는 그룹의 문자 또는 간단한 그룹과 같은 표준 방법은 엄청나게 느릴 수 있습니다. 훨씬 더 효율적인 솔루션은 row_number ()

창 함수를 사용합니다 :
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;

이 쿼리는 두 단계로 작동합니다.
  1. 내부 쿼리 : rnk )를 각 id 파티션 (동일한 ID를 가진 행 그룹) 내의 각 행에 고유 한 순위 ( rnk

    를 할당합니다. 순위는
  2. 버전
  3. 열을 하강 순서로 기준으로합니다. 이는 가장 높은 버전이 1 위를 차지합니다.

    OUTER QUERY : 내부 쿼리에서 결과를 필터링하여 rnk = 1 를 선택하는 행 만 선택합니다. 이것은 각 id

    .

이 접근법은 작업에 의해 중첩 된 쿼리와 그룹을 피하기 때문에 대형 데이터 세트의 경우 훨씬 더 빠릅니다. row_number () 의 사용은 원하는 결과를 달성하는 깨끗하고 효율적인 방법을 제공합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3