> 데이터 베이스 > MySQL 튜토리얼 > 일대다 SQL 관계에서 마지막 레코드를 효율적으로 검색하는 방법은 무엇입니까?

일대다 SQL 관계에서 마지막 레코드를 효율적으로 검색하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-19 12:26:09
원래의
1005명이 탐색했습니다.

How to Efficiently Retrieve the Last Records in a One-to-Many SQL Relationship?

일대다 관계에서 최신 레코드를 검색하기 위한 SQL 조인

데이터베이스 쿼리에는 일대다 관계에서 가장 최근 항목을 검색하는 작업이 포함되는 경우가 많습니다. '고객' 및 '구매' 테이블이 있는 데이터베이스를 상상해 보세요. 각 구매는 단일 고객에게 속합니다. 이 접근 방식은 단일 SELECT 문을 사용하여 고객 목록과 가장 최근 구매를 효율적으로 검색합니다.

<code class="language-sql">SELECT c.*, p1.*
FROM customer c
JOIN purchase p1 ON (c.id = p1.customer_id)
LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND p1.date < p2.date)
WHERE p2.customer_id IS NULL;</code>
로그인 후 복사

설명:

  1. INNER JOIN은 'customer_id'를 통해 '고객'과 '구매' 테이블을 연결하여 고객을 구매와 연결합니다.
  2. LEFT OUTER JOIN은 이후 날짜에 각 고객의 추가 구매를 식별합니다.
  3. WHERE 절은 이러한 추가 항목을 필터링하여 고객당 가장 최근 구매 항목만 유지합니다.

성능 최적화: 인덱싱

최적의 성능을 위해 '(customer_id, date, id)' 열을 사용하여 'purchase' 테이블에 복합 인덱스를 생성하세요. 이를 통해 고객, 날짜, ID를 기준으로 구매에 대한 효율적인 데이터베이스 검색이 가능합니다.

비정규화 절충:

'고객' 테이블 내에 마지막 구매 날짜를 저장하면(비정규화) 자주 발생하는 마지막 구매 쿼리에 대한 성능을 향상시킬 수 있습니다. 그러나 이로 인해 데이터 중복성과 잠재적인 무결성 문제가 발생합니다.

제한 1절: 덜 신뢰할 수 있는 대안

'구매' 테이블 ID가 일관되게 날짜순으로 정렬되어 있는 경우 하위 쿼리에 LIMIT 1을 사용하면 쿼리가 단순화됩니다. 그러나 이 방법의 신뢰성은 LEFT OUTER JOIN 접근 방식보다 일관성이 떨어집니다. LEFT OUTER JOIN 방법은 일반적으로 견고성 때문에 선호됩니다.

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

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