2013-06-28 4 views
-1

조인 할 테이블이 두 개 있습니다. 예를 들어 A와 B가 있습니다. A는 10k 레코드가 작고 B는 몇 백만 레코드가 있습니다. 조인은 A.a = B.b입니다. a 나 b에는 색인이 없습니다. 나는 작은 테이블에서 변경할 수 있지만 큰 테이블에서는 변경할 수 없습니다. 그리고 조인에 대한 B.b의 데이터 형식을 변환해야합니다. 쿼리 실행 시간이 오래 걸립니다. 성능을 향상시킬 수있는 방법이 있습니까?다른 크기의 조인 테이블

+6

"쿼리 실행 시간이 오래 걸립니다. 성능을 향상시킬 수있는 방법이 있습니까?" 색인을 추가하십시오. – Kevin

+0

쿼리가 반환하는 행 수는 대략 몇 개입니까? 가능한 경우 전체 쿼리 구문을 게시 할 수 있습니다. – ChrisProsser

+0

자세한 내용을 게시하거나 도움을 드릴 수 없습니다. 쿼리 구문, 분할 된 테이블, 결과 집합의 예상 크기 등 – Ollie

답변

0

가능한 경우 더 작은 테이블의 변환을 수행하고 큰 테이블에 인덱스를 추가하는 것이 좋습니다 (전환이 색인의 사용을 방해하므로).

어떤 이유에서든이 작업을 수행 할 수 없거나 큰 테이블의 큰 부분 (약 15 % 이상)을 반환하려는 경우 전체 테이블 스캔이 가장 효율적인 옵션 일 수 있습니다. 이에 대한 자세한 내용은 여기 (http://asktom.oracle.com/pls/apex/f?p=100:11:0::::p11_question_id:9422487749968). 당신이 위의 당신이 그것을위한 하드웨어가 다음 경우 전체 테이블 스캔이 좋아 (또는 필요)입니다 결론에서 쿼리 병렬 힌트

을 도울 수있는 경우 : 위의 코드에서

select /*+ parallel(B,default) */ <columns here> ... 

B는 병렬 힌트 (큰 테이블)를 적용하려는 테이블의 별칭이고 기본값은 사용할 코어 수입니다. 원하는 경우 여기에 숫자를 지정할 수 있습니다.

쿼리의 구문을 보지 않고도 다른 이점이 있는지 여부를 조언 할 수 없습니다.

1

최상의 성능을위한 가장 가능성있는 조인 방법은 해시 조인이므로 인덱스가 사용되지 않습니다.

변환 할 열은 더 작은 테이블의 조인 열이 될 것이지만 이는 아마도 CPU주기가 더 적기 때문일 것입니다.

작은 테이블에서 작성된 해시 테이블이 PGA 메모리에 적합하면 쿼리는 두 테이블의 전체 테이블 검색과 거의 동일한 시간이 걸릴 것입니다. 쿼리 실행 중에 v $ sql_workarea_active를 다음과 같이 확인하십시오. 테이블의 크기와 temp 테이블 스페이스로 유출되는지 여부를 모니터하십시오.

관련 문제