> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 각 그룹에서 마지막 레코드를 효율적으로 찾는 방법은 무엇입니까?

MySQL의 각 그룹에서 마지막 레코드를 효율적으로 찾는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-25 19:32:11
원래의
295명이 탐색했습니다.

각 그룹의 마지막 레코드를 얻는 데 효율적인 mysql 효율적 How to Efficiently Find the Last Record in Each Group in MySQL?

SQL에서 각 그룹의 최신 레코드를 추출하는 것이 더 까다로울 수 있습니다. 일반적인 장면은 테이블에 동일한 기본 키를 공유하기위한 여러 레코드가 있으며 각 기본 키의 최신 항목을 추출해야합니다. 이 기사는 효율적이고 최적화 된 솔루션을 제공합니다.

문제 설명 다음 테이블을 고려하십시오

기본 그룹 쿼리를 사용하는 기본 그룹 쿼리는 다음 결과를 생성합니다.

그러나 예상 출력은 각 그룹의 최신 레코드입니다.

솔루션

창 함수를 사용하십시오 (MySQL 8.0 이상) MySQL 8.0은 각 그룹의 마지막 레코드를 찾기위한 우아한 솔루션을 제공하기 위해 창 함수를 도입했습니다. 다음 쿼리는 기능을 사용 하여이 목적을 달성합니다.

Lept Join (MySQL의 초기 버전)

MySQL 8.0 이전에 가장 효과적인 솔루션은 messages : 를 사용하는 것입니다.

성능 및 적용 가능성
Id Name Other_Columns
1 A A_data_1
2 A A_data_2
3 A A_data_3
4 B B_data_1
5 B B_data_2
6 C C_data_1

두 솔루션 모두 매우 효율적이지만 성능은 데이터의 크기 및 분포에 따라 다를 수 있습니다. 크고 다양한 데이터 세트의 경우 일반적으로 창 함수 메소드가 권장됩니다. SELECT * FROM messages GROUP BY Name 데이터가 특정 모드 (예 : 각 그룹의 상대적으로 적은 레코드)를 제시하면 메소드가 더 효율적일 수 있습니다.

벤치 마크 테스트
Id Name Other_Columns
1 A A_data_1
4 B B_data_1
6 C C_data_1
대부분의 경우

방법은 그룹화 기술보다 더 나은 것으로 입증되었습니다. 예를 들어, 수백만 개의 라인이있는 대형 데이터베이스에서

메소드의 실행 시간은 1 초 미만이며 그룹화 기술은 1 분 이상 걸립니다.
Id Name Other_Columns
3 A A_data_3
5 B B_data_2
6 C C_data_1
그러나 그러나 항상 특정 데이터 세트 에서이 두 솔루션을 테스트하여 최상의 방법을 결정하는 것이 좋습니다.

위 내용은 MySQL의 각 그룹에서 마지막 레코드를 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿