> 데이터 베이스 > MySQL 튜토리얼 > 필터링 및 정렬을 통해 Oracle에서 상위 10개 레코드를 효율적으로 선택하는 방법은 무엇입니까?

필터링 및 정렬을 통해 Oracle에서 상위 10개 레코드를 효율적으로 선택하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-18 15:42:11
원래의
234명이 탐색했습니다.

How to Efficiently Select the Top 10 Records in Oracle with Filtering and Ordering?

Oracle 상위 10개 레코드 선택: 필터링, 정렬 및 최적화

Oracle에서 상위 10개 레코드를 검색하는 것은 일반적으로 간단하지만 필터를 추가하고 성능 우선 순위를 지정하는 것은 어려운 일입니다. 최근 스택 오버플로 질문에서는 특정 조건을 충족하는 레코드를 제외하고 특정 열을 기준으로 상위 10개 레코드를 선택하는 데 초점을 맞춰 이를 강조했습니다.

원래 쿼리와 단점

초기 SQL 쿼리는 Null이 아닌 저장 용량, 특정 날짜의 레코드 제외, 저장 용량별 내림차순 등 여러 기준에 따라 고유한 레코드를 선택하는 것을 목표로 했습니다. 그러나 쿼리는 결과를 상위 10개로 올바르게 제한하지 못했습니다.

<code class="language-sql">SELECT DISTINCT 
  APP_ID, 
  NAME, 
  STORAGE_GB, 
  HISTORY_CREATED, 
  TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE  
FROM HISTORY WHERE 
      STORAGE_GB IS NOT NULL AND 
        APP_ID NOT IN (SELECT APP_ID
                       FROM HISTORY
                        WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009') </code>
로그인 후 복사

ROWNUM <= 10 절이 처리되기 ROWNUM전에 가 할당되기 때문에 이 쿼리에 ORDER BY를 추가하는 것만으로는 올바른 상위 10개가 생성되지 않습니다.

해결책: 하위 쿼리 접근 방식

필터링과 정렬을 올바르게 적용하기 위해 하위 쿼리를 사용하는 효과적인 솔루션은 다음과 같습니다.

<code class="language-sql">SELECT * FROM (
  SELECT DISTINCT 
  APP_ID, 
  NAME, 
  STORAGE_GB, 
  HISTORY_CREATED, 
  TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE  
  FROM HISTORY WHERE 
    STORAGE_GB IS NOT NULL AND 
      APP_ID NOT IN (SELECT APP_ID FROM HISTORY WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') ='06.02.2009')
  ORDER BY STORAGE_GB DESC )
WHERE ROWNUM <= 10</code>
로그인 후 복사

이 중첩 구조는 레코드가 먼저 정렬된 다음 상위 10개가 선택되도록 보장합니다.

성능 개선

순서 수정 외에도 EXISTS 대신 NOT IN을 사용하면 성능이 크게 향상됩니다. EXISTS 일반적으로 더 나은 최적화 기회를 제공하여 조인을 최소화하고 쿼리 실행 속도를 향상시킵니다.

위 내용은 필터링 및 정렬을 통해 Oracle에서 상위 10개 레코드를 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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