>데이터 베이스 >MySQL 튜토리얼 >대규모 데이터베이스 테이블에서 그룹당 하나의 행을 효율적으로 선택하는 방법은 무엇입니까?

대규모 데이터베이스 테이블에서 그룹당 하나의 행을 효율적으로 선택하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-31 01:04:08291검색

How to Efficiently Select One Row per Group from a Large Database Table?

각 그룹에서 하나의 행을 효율적으로 선택

수백만 개의 레코드가 포함된 대규모 제품 테이블에서는 쿼리 최적화가 성능에 매우 중요합니다. 일반적인 시나리오는 각 매장의 최대 ID와 같은 특정 열을 기반으로 테이블의 각 그룹에서 단일 행을 검색하는 것입니다.

원래 쿼리 및 성능 문제:

이 작업에 사용된 초기 쿼리는 다음과 같습니다.

SELECT id, product_name, store_id
FROM product
GROUP BY store_id
ORDER BY id.

그러나 이 쿼리는 그룹화로 인해 성능 문제에 직면했습니다. 및 집계 작업이 포함됩니다.

권장 접근 방식:

효율적인 솔루션은 하위 쿼리를 사용하여 각 매장의 최대 ID를 결정하고 이를 기본 테이블에 조인하는 것입니다.

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  store_ID, MAX(ID) max_ID
            FROM    tableName
            GROUP BY store_ID
        ) b ON a.store_ID = b.store_ID AND
                a.ID = b.max_ID

이 쿼리는 하위 쿼리에서 그룹화 및 집계를 수행하므로 더 나은 결과를 얻을 수 있습니다. 성능.

추가 성능 팁:

  • 테이블의 ID 및 store_id 열에 인덱스가 있는지 확인하세요.
  • 데이터베이스 사용을 고려하세요. 병렬화 및 최적화를 지원하는 서버 기능.

다중 행 선택:

각 그룹에서 여러 행을 검색해야 하는 경우 다음 쿼리를 사용할 수 있습니다.

SELECT ID, product_Name, store_ID
FROM   tableName a
WHERE
  (
     SELECT COUNT(*) 
     FROM   tableName b
     WHERE  b.store_ID = a.store_ID AND b.ID >= a.ID
  ) <= 2;

이 쿼리는 ID 열을 기준으로 각 그룹에서 최대 2개의 행을 검색합니다.

위 내용은 대규모 데이터베이스 테이블에서 그룹당 하나의 행을 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.