대형 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;
이 쿼리는 두 단계로 작동합니다.
내부 쿼리 : 각
rnk )를 각
id 파티션 (동일한 ID를 가진 행 그룹) 내의 각 행에 고유 한 순위 (
rnk
OUTER QUERY : 내부 쿼리에서 결과를 필터링하여
rnk = 1 를 선택하는 행 만 선택합니다. 이것은 각
id
이 접근법은 작업에 의해 중첩 된 쿼리와
그룹을 피하기 때문에 대형 데이터 세트의 경우 훨씬 더 빠릅니다. row_number ()
의 사용은 원하는 결과를 달성하는 깨끗하고 효율적인 방법을 제공합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3