보고 있 는 ORACLE 튜 토리 얼 은 Oracle SQL 성능 최적화 시리즈 학습 2 입 니 다. 4. 가장 효율 적 인 표 이름 순 서 를 선택 하 십시오(규칙 에 기반 한 최적화 기 에서 만 유효 합 니 다) ORACLE 의 해석 기 는 FROM 자구 의 표 명 을 오른쪽 에서 왼쪽으로 순서대로 처리 하기 때문에 FROM 자구 에 마지막 표(기초 표)를 쓴다. driving table)가장 먼저 처 리 됩 니 다. FROM 자구 에 여러 개의 시 계 를 포함 하 는 경우,기록 항목 수가 가장 적은 시 계 를 기본 표 로 선택해 야 합 니 다.ORACLE 가 여러 개의 시 계 를 처리 할 때, 정렬 및 병합 방식 으로 연결 합 니 다.우선 첫 번 째 표(FROM 자구 의 마지막 표)를 스 캔 하고 기록 을 파 순 한 다음 두 번 째 표(FROM 자구 의 마지막 두 번 째 표)를 스 캔 한 다음 두 번 째 표 에서 검색 한 모든 기록 을 첫 번 째 표 에서 적당 한 기록 과 합 칩 니 다. 예 를 들 면: 시계. TAB1 16,384 조목 기록 시계. TAB2 1 조목 기록 TAB 2 를 기본 표 로 선택 (가장 좋 은 방법 select count(*) from tab1,tab2 실행 시간 0.96 초 TAB 2 를 기본 표 로 선택 (안 좋 은 방법 select count(*) from tab2,tab1 실행 시간 26.09 초 3 개 이상 의 표 연결 조회 가 있 으 면, 교차 표(intersection)를 선택해 야 합 니 다. table)기본 표 로, 교차 표 는 다른 표 에 의 해 인 용 된 표를 가리킨다. 예 를 들 면: EMP 표 는 LOCATION 표 와 CATEGORY 표 의 교 집합 을 묘사 했다. SELECT * FROM LOCATION L , CATEGORY C, EMP E WHERE E.EMP_NO BETWEEN 1000 AND 2000 AND E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN 다음 SQL 보다 더 효율 적 입 니 다. SELECT * FROM EMP E , LOCATION L , CATEGORY C WHERE E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN AND E.EMP_NO BETWEEN 1000 AND 2000 5. WHERE 자구 의 연결 순서. ORACLE 는 아래 에서 위로 WHERE 자 구 를 해석 하 는데 이 원리 에 따라 표 간 의 연결 은 다른 WHERE 조건 전에 써 야 합 니 다. 최대 수량 기록 을 걸 러 낼 수 있 는 조건 은 WHERE 자구 의 끝 에 써 야 합 니 다. 예 를 들 면: (저 효과,실행 시간 156.3 초) SELECT … FROM EMP E WHERE SAL > 50000 AND JOB = ‘MANAGER' AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO); (고 효율,실행 시간 10.6 초) SELECT … FROM EMP E WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL > 50000 AND JOB = ‘MANAGER'; 6. SELECT 자구 에서 사용 하지 않 기 ‘ * ‘ SELECT 자구 에 모든 COLUMN 을 표시 하려 면 동적 SQL 열 참조 ‘*' 편리 한 방법 이다.불행 하 게 도 이것 은 매우 비효 율 적 인 방법 이다. 실제로 ORACLE 는 해석 하 는 과정 에서 '*' 순서대로 모든 열 이름 으로 변환, 이 작업 은 데이터 사전 조 회 를 통 해 이 루어 졌 습 니 다. 이것 은 더 많은 시간 을 소모 할 것 이라는 것 을 의미한다. 7. 데이터베이스 에 접근 하 는 횟수 를 줄이다 모든 SQL 문 구 를 실행 할 때, ORACLE 는 내부 에서 많은 작업 을 수행 했다. SQL 문 구 를 해석, 색인 의 이 용 률 을 추산 하 다. 바 인 딩 변수 , 데이터 블록 읽 기 등등. 이로써 알 수 있다. 데이터베이스 에 접근 하 는 횟수 를 줄이다 , 실제로 ORACLE 의 작업량 을 줄 일 수 있 습 니 다. 예컨대 다음은 세 가지 방법 으로 직원 번호 가 0342 또는 0291 인 직원 을 검색 할 수 있다. 방법 (최 저 효과 SELECT EMP_NAME , SALARY , GRADE FROM EMP WHERE EMP_NO = 342; SELECT EMP_NAME , SALARY , GRADE FROM EMP WHERE EMP_NO = 291; 방법 (차 저 효과 DECLARE CURSOR C1 (E_NO NUMBER) IS SELECT EMP_NAME,SALARY,GRADE FROM EMP WHERE EMP_NO = E_NO; BEGIN OPEN C1(342); FETCH C1 INTO …,..,.. ; ….. OPEN C1(291); FETCH C1 INTO …,..,.. ; CLOSE C1; END; 방법 (고 효율 SELECT A.EMP_NAME , A.SALARY , A.GRADE, B.EMP_NAME , B.SALARY , B.GRADE FROM EMP A,EMP B WHERE A.EMP_NO = 342 AND B.EMP_NO = 291; 주[1]
[2] 다음 페이지보고 있 는 ORACLE 튜 토리 얼 은 Oracle SQL 성능 최적화 시리즈 학습 2.뜻: SQL*Plus 에서 , SQL*Forms 와 Pro*C 에서 ARRAYSIZE 인 자 를 다시 설정 합 니 다. 데이터베이스 에 접근 할 때마다 검색 데 이 터 를 늘 릴 수 있 습 니 다. ,권장 치 는 200 이다.
이전 페이지 [1] [2]