Oracle 표 세 가지 연결 방식 사용 소개(sql 최적화)

3680 단어 시계.연결 방식
1. NESTED LOOP
연 결 된 데이터 부분 집합 이 작은 경우 nested loop 연결 은 좋 은 선택 입 니 다.nested loop 은 시 계 를 스 캔 하 는 것 입 니 다.기록 을 읽 을 때마다 색인 에 따라 다른 표 에서 찾 습 니 다.색인 이 없 으 면 보통 nested loops 가 아 닙 니 다.일반적으로 nested loop 에서 드라이버 만족 조건 결과 집합 이 크 지 않 고 드라이버 의 연결 필드 에 색인 이 있어 야 nstedloop 으로 갑 니 다.드라이버 가 기록 을 너무 많이 되 돌려 주면 nested loops 에 적합 하지 않 습 니 다.연결 필드 에 색인 이 없 으 면 hash join 으로 가기 좋 습 니 다.색인 이 필요 하지 않 기 때 문 입 니 다.
ordered 알림 으로 CBO 기본 드라이버 를 변경 할 수 있 습 니 다.USE 사용 가능NL(table_name1 table_name 2)힌트 로 nested loop 을 강제로 사용 합 니 다.
요점 은 다음 과 같다.
1)연 결 된 데이터 부분 집합 이 비교적 작은 경우,포 함 된 순환 연결 은 비교적 좋 은 선택 이다.
2)USE 사용NL(table_name1 table_name 2)CBO 에 포 함 된 순환 연결 을 강제 합 니 다.
3)Nested loop 은 일반적으로 연 결 된 표 에 색인 이 있 고 색인 선택성 이 좋 을 때 사용 된다.
4)OIN 의 순 서 는 매우 중요 하 다.드라이버 의 기록 집합 은 반드시 작 아야 하고 결과 집합 으로 돌아 가 는 응답 시간 이 가장 빠르다.
5)Nested loops 작업 방식 은 한 표 에서 데 이 터 를 읽 고 다른 표(보통 색인)에 접근 하여 일치 하 는 것 입 니 다.nested loops 가 적용 되 는 장 소 는 관련 표 가 비교적 어 릴 때 효율 이 높 습 니 다.
2. HASH JOIN
hash join 은 CBO 가 빅 데이터 세트 를 연결 할 때 자주 사용 하 는 방식 입 니 다.최적화 기 는 작은 시계(데이터 원본)를 스 캔 하고 연결 키(즉 연결 필드 에 따라 hash 값 계산)를 이용 하여 메모리 에 hash 표를 만 든 다음 큰 시 계 를 스 캔 합 니 다.기록 을 읽 을 때마다 hash 표를 한 번 씩 탐지 하여 hash 표 와 일치 하 는 줄 을 찾 습 니 다.
작은 시계 가 모두 메모리 에 넣 을 수 있 을 때,그 원 가 는 전체 시계 가 두 개의 시 계 를 스 캔 하 는 원가 의 합 에 가깝다.표 가 커서 메모리 에 완전히 넣 지 못 하면 유 틸 리 티 는 여러 개의 다른 파 티 션 으로 나 누 어 메모리 에 넣 지 못 하 는 부분 은 이 파 티 션 을 디스크 의 임시 세그먼트 에 기록 합 니 다.이 때 는 비교적 큰 임시 세그먼트 가 있어 서 I/O 의 성능 을 최대한 향상 시 켜 야 합 니 다.임시 세그먼트 의 파 티 션 은 모두 메모리 에 hash join 으로 바 꿔 야 합 니 다.이때 원 가 는 전체 표 스 캔 작은 표+파 티 션 수*전체 표 스 캔 큰 표 의 대가 와 비슷 하 다.
두 표 모두 파 티 션 을 진행 하 는데 그 장점 은 parallel query 를 사용 할 수 있다 는 것 입 니 다.여러 프로 세 스 가 서로 다른 파 티 션 에 join 을 한 다음 에 합병 하 는 것 입 니 다.근 데 복잡 해.
hash join 사용 시 HASHAREA_SIZE 초기 화 매개 변 수 는 충분 해 야 합 니 다.9i 라면 Oracle 은 SQL 작업 공간 자동 관 리 를 사용 하여 WORKAREA 를 설정 하 는 것 을 권장 합 니 다.SIZE_POLICY 를 AUTO 로 하고 PGA 를 조정 합 니 다.AGGREGATE_TARGET 이면 됩 니 다.
다음 조건 에서 hash join 은 우세 할 수 있 습 니 다.
1)두 개의 커 다란 시계 사이 의 연결.
2)커 다란 시계 와 작은 시계 사이 의 연결
요점 은 다음 과 같다.
1)해시 연결 은 CBO 가 빅 데이터 세트 로 연결 할 때 자주 사용 하 는 방식 이다.
2)USE 도 사용 가능HASH(table_name1 table_name 2)해시 연결 강제 사용 알림
3)Hash join 은 두 표 의 데이터 양 차이 가 매우 클 때.
4)Hash join 의 작업 방식 은 하나의 표(보통 작은 표)를 hash 연산 을 하고 hash 목록 에 저장 하 며 다른 표 에서 기록 을 추출 하여 hash 연산 을 하고 hash 목록 에서 해당 하 는 값 을 찾 아 일치 하 는 것 입 니 다.
ordered 알림 으로 CBO 기본 드라이버 를 변경 할 수 있 습 니 다.USE 사용 가능HASH(table_name1 table_name 2)힌트 로 hash join 을 강제로 사용 합 니 다.
3. SORT MERGE JOIN
a)연 결 된 시계 마다 table access full 하기;
b)table access full 의 결 과 를 정렬 합 니 다.
c)정렬 결 과 를 merge join 으로 통합 합 니 다.
sort merge join 성능 비용 은 거의 두 단계 앞 선다.일반적으로 색인 이 없 는 상황 에서 9i 는 거의 나타 나 지 않 습 니 다.정렬 원가 가 높 기 때문에 대부분 hash join 으로 대 체 됩 니 다.
일반적으로 hash join 의 효 과 는 sort merge join 보다 좋 습 니 다.그러나 줄 소스 가 정렬 되 어 있 으 면 sort merge join 을 실행 할 때 정렬 할 필요 가 없습니다.이때 sort merge join 의 성능 은 hash join 보다 좋 습 니 다.
전체 표 스 캔 이'색인 범위 스 캔 후 rowid 를 통 해 표 접근'보다 더 바람 직 한 경우 sort merge join 은 nested loops 보다 성능 이 좋 습 니 다.
요점 은 다음 과 같다.
1)USE 사용MERGE(table_name1 table_name 2)정렬 병합 연결 을 강제로 사용 합 니 다.
2)Sort Merge join 은 색인 이 없고 데이터 가 정렬 된 경우 에 사 용 됩 니 다.
3)연결 절차:두 개의 시 계 를 정렬 한 다음 두 개의 시 계 를 합 친다.
4)통상 적 으로 다음 과 같은 경우 에 만 이러한 조인 방식 을 사용한다.
a)RBO 모드
b)부 등가 관련(>,<,>=,<=,<)
c)bHASH_JOIN_ENABLED=false
d)데이터 원본 정렬 됨
e)Merge Join 은 먼저 관련 표 의 관련 열 을 각각 정렬 한 다음 에 각자 의 정렬 표 에서 데 이 터 를 추출 하여 다른 정렬 표 에 일치 시 키 는 것 입 니 다.merge join 은 더 많은 정렬 을 해 야 하기 때문에 소모 하 는 자원 이 더 많 습 니 다.
f) like ,not like
일반적으로 merge join 을 사용 할 수 있 는 곳 은 hash join 이 더 좋 은 성능 을 발휘 할 수 있 습 니 다.
사용 가능 USEMERGE(table_name1 table_name 2)알림 은 sort merge join 을 강제로 사용 합 니 다.

좋은 웹페이지 즐겨찾기