PL / SQL DEVELOPER 실행 계획 보기

여기 서 제 가 배 운 중요 한 것 은 바로 PL / SQL DEVELOPER 로 SELECT 문장의 집행 계획 을 보 는 것 입 니 다. 집행 계획 에서 이 SELECT 문장의 씀 씀 이, I / O 작업 비용 등 수 치 를 볼 수 있 고 문장의 각 부분의 집행 효율 을 뚜렷하게 볼 수 있 습 니 다.이 SELECT 문 구 를 선택 하고 F5 를 누 르 면 됩 니 다.
         아래 의 SELECT 문 구 를 예 로 들 면: 
   세 장의 표 에서 데 이 터 를 추출 하고 제 가 예전 에 생각 했 던 대로 WHERE 문구 에 세 장의 표를 연결 할 수 있 는 조건 만 있 으 면 됩 니 다.그래서 저 는 사용 만 했 습 니 다.
 
 F5 를 누 르 면 다음 과 같은 실행 계획 을 볼 수 있 습 니 다.
씀 씀 이 974 는 사실 높 은 편 은 아니다.그러나 테스트 환경의 데이터베이스 연결 속도 가 확실히 느 려 서 데이터베이스 연결 시간 초과 알림 이 자주 나타난다.
         수 정 된 SELECT 문 구 는 다음 과 같 습 니 다.
      수정 은 WHERE 에 두 개의 관련 조건 을 더 한 것 으로 보인다.이 때 F5 로 계획 을 실행 합 니 다.
 
  이때 COST 는 95 밖 에 남지 않 았 다.실제 조작 에서 도 조작 속도 의 향상 을 뚜렷하게 느 꼈 다.
         실행 계획 의 집행 순 서 는 내부 에서 외부 로, 위 에서 아래로 이다.예 를 들 어 위 에서 수정 한 실행 계획 에서 데이터 베 이 스 는 먼저 ORDERHEADER 의 메 인 키 는 색인 범위 검색 을 한 다음 XXWMSDLX_SERIAL_NUMBER 의 유일한 인덱스 가 아 닌 XXWMSDLX_SERIAL_NUMBER_N4 색인 범위 검색.
         수정 하기 전에 SERIALNUMBER 표 와 XXWMSDLX_SERIAL_NUMBER 표 는 순환 끼 워 넣 기 (NESTED LOOPS) 의 연결 방법 을 사용 하여 결 과 를 얻 은 후 ORDERHEADER 가 해시 연결 을 진행 합 니 다.두 표 의 데 이 터 량 이 비교적 많 기 때문에 (SERIAL NUMBER 는 테스트 환경 에서 데 이 터 량 이 1 천 4 백만 개 정도 에 달 합 니 다) 순환 포 함 된 연결 절 차 는 분명히 많은 비용 을 들 였 습 니 다.
         순환 플러그 연결 중 하나 인 테이블 의 데이터 양 이 적 으 면 비용 을 많이 줄 일 수 있 을 것 으로 예상 된다.그래서 연결 조건 에 xx. client 를 하나 더 추가 합 니 다.id = oh.client_id。이렇게 해서 ORDER 을 사 용 했 습 니 다.HEADER 의 메 인 키 와 XXWMSDLX_SERIAL_NUMBER 의 N4 색인 을 연결 하여 결 과 를 얻 은 후에 SERIALNUMBER 연결.그 결과 위의 그림 에서 보 듯 이 COST 는 95 에 불과 해 집행 효율 을 크게 높 였 다.
         이 경험 을 통 해 저 는 PL / SQL 의 최적화 가 상당히 신기 하고 효과 가 똑 같 지만 조건 만 추가 하면 집행 효율 을 이렇게 높 일 수 있다 고 생각 합 니 다.이 변화 로 인해 튀 어 나 온 시간 초과 알림 의 확률 이 크게 낮 아 지고 사용자 에 게 이 변 화 는 매우 중요 하 다.
 다른 보기 방법:
    
플랜 을 먼저 만들어 야 합 니 다tablecreate table PLAN_TABLE (        statement_id         varchar2(30),        timestamp            date,        remarks              varchar2(80),        operation            varchar2(30),        options               varchar2(255),        object_node          varchar2(128),        object_owner         varchar2(30),        object_name          varchar2(30),        object_instance numeric,        object_type     varchar2(30),        optimizer       varchar2(255),        search_columns  number,        id                numeric,        parent_id        numeric,        position        numeric,        cost                numeric,        cardinality        numeric,        bytes                numeric,        other_tag       varchar2(255),        partition_start varchar2(255),        partition_stop  varchar2(255),        partition_id    numeric,        other                long,        distribution    varchar2(30),        cpu_cost        numeric,        io_cost                numeric,        temp_space        numeric);표를 작성 한 sql 은 rdbms / admin 에 있 습 니 다. 이름 은 utlxplan. sql 입 니 다. 저 는 9i 를 사용 합 니 다. 다른 버 전의 이름 이 다 를 수 있 습 니 다. 그리고 explain plan for sql 문 구 를 실행 한 다음 에 이 sql 을 실행 할 수 있 습 니 다. 결 과 를 볼 수 있 습 니 다 SELECT LPAD (', 2 * LEVEL) | |       operation ||       ' ' ||       options ||       ' ' ||       object_name query_plan  FROM plan_tableCONNECT BY PRIOR id = parent_idSTART WITH id = 1ORDER BY id;
따로 떼 기:
          , cost ,        ,   Description ,   table access
 full          ,             。

좋은 웹페이지 즐겨찾기