2016-10-11 12 views
1

Oracle 12c 데이터베이스에서 SQL 문을 분석합니다. 우리는 다음과 같은 진술이 여러 번 실행 됨으로써 개선되었음을 알았습니다. 두 번째와 세 번째로 실행하여 어떻게 향상되는지 설명 할 수 있습니까?Oracle SQL 쿼리는 두 번째 및 세 번째 실행시 성능을 향상시킵니다.

SELECT COUNT (*) 
    FROM asset 
WHERE  ( ( (status NOT IN ('x1', 'x2', 'x3')) 
       AND ((siteid = 'xxx'))) 
      AND (EXISTS 
        (SELECT siteid 
         FROM siteauth a, groupuser b 
         WHERE  a.groupname = b.groupname 
          AND b.userid = 'xxx' 
          AND a.siteid = asset.siteid))) 
     AND ((assetnum LIKE '5%')); 
  • 첫 방송 : 24 초.
  • 두 번째 실행 : 17 초
  • 세 번째 실행 : 7 초
  • 네 번째 실행 : 7 초
  • 결과 현금을 사용하여 조정 : 0,003 초.
+2

쿼리를 두 번째, 세 번째 등으로 실행하기 전에 shared_pool 및 buffer_cache를 플러시 했습니까? 오라클은 쿼리 결과를 캐시합니다. – Kacper

+1

적응 형 쿼리 최적화 : http://www.oracle.com/technetwork/database/database-technologies/query-optimization/overview/index.html –

답변

4

Oracle은 기본적으로 쿼리 결과를 캐시하지 않지만 쿼리에서 사용하는 데이터 블록을 캐시합니다. 또한 12c에는 "Adaptive execution plans"및 "Cardinality feedback"과 같은 기능이있어 테이블 통계가 다시 계산되지 않아도 실행간에 실행 계획이 변경 될 수 있습니다.

1

오라클은 디스크의 데이터를 메모리로 가져옵니다. 쿼리를 두 번째 실행하면 데이터가 메모리에서 발견되므로 디스크를 읽을 필요가 없습니다. 빠른 쿼리 실행 결과. 데이터베이스가 "예열 됨"입니다.

+0

세 번째 실행의 개선점은 어떻게 설명 할 수 있습니까? – r0tt