> 데이터 베이스 > MySQL 튜토리얼 > MySQL에서 각 그룹의 마지막 행을 효율적으로 반환하는 방법은 무엇입니까?

MySQL에서 각 그룹의 마지막 행을 효율적으로 반환하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-11 20:29:02
원래의
700명이 탐색했습니다.

How to Efficiently Return the Last Row of Each Group in MySQL?

MySQL에서 각 그룹의 마지막 행을 효과적으로 반환

데이터 조작을 위해 MySQL에서 각 그룹의 마지막 행을 반환해야 하는 경우가 많습니다. 프롬프트에 제공된 쿼리:

select * 
    from foo as a
    where a.id = (select max(id) from foo where uid = a.uid group by uid)
    group by uid;
로그인 후 복사

중첩 쿼리를 수행하여 각 고유 UID의 최대 ID를 찾은 다음 일치하는 ID가 있는 행만 선택하여 이를 달성합니다.

더 효율적인 접근 방식

그러나 더 효율적인 쿼리를 사용하여 중첩 쿼리를 제거할 수 있습니다.

SELECT t1.* 
FROM foo t1
JOIN (
    SELECT uid, MAX(id) AS max_id 
    FROM foo 
    GROUP BY uid
) t2 ON t1.id = t2.max_id;
로그인 후 복사

이 쿼리는 JOIN 연산을 사용하여 최대값을 직접 일치시킵니다. 각 UID에 대한 ID로 중첩 쿼리 접근 방식에 비해 향상된 성능을 제공합니다.

추가 최적화 고려 사항

추가 최적화를 위해 EXPLAIN을 사용하여 쿼리 계획을 분석하고 잠재적인 병목 현상을 식별합니다. 또한 UID 열의 인덱스는 쿼리 성능을 크게 향상시킬 수 있습니다.

대체 접근 방식

또 다른 옵션은 LAG() 함수를 사용하는 것입니다.

SELECT t1.* 
FROM foo t1
LEFT JOIN foo t2
ON t1.id < t2.id AND t1.uid = t2.uid
WHERE t2.id is NULL;
로그인 후 복사

이 쿼리는 LAG() 함수를 사용하여 그룹의 다음 행을 식별합니다. 후속 행이 없는 경우(즉, 현재 행이 그룹의 마지막 행인 경우) 쿼리는 현재 행을 반환합니다. 이 접근 방식은 효율적일 수 있지만 위에서 설명한 JOIN 기반 쿼리만큼 성능이 항상 뛰어난 것은 아닙니다.

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

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