2011-04-01 2 views
0

전체 테이블 스캔을 수행하는 인덱스 범위 스캔 대신 다음과 같은 병합 구문이 있습니다. 전체 테이블 스캔을 시작했을 때 테이블이 변경된 후 3-4 개의 새로운 컬럼이 추가 될 때까지 마지막까지 성공적으로 실행되었습니다.인덱스 범위 스캔 대신 전체 테이블 스캔을 수행하면 성능 문제가 발생합니다.

우리는 동일한 변경 사항을 갖는 유사한 테이블 7 개를 가지고 있습니다. 즉, 3-4 개의 컬럼이 추가되었지만 인덱스를 다시 만들 때 하나의 테이블을 제외하고는 문제가 해결되었습니다.

누구든지이 부분을 밝힐 수 있습니까?

-Nagu

+3

코드가 질문에서 누락 된 것처럼 보입니다. 코드없이 답을 얻을 수 없습니다. – Lunc

+1

아마 최적화 프로그램이 카디널리티를 고려할 때 좋은 선택을하고있을 것입니다. 테이블 내용에 대한 통계를 다시 계산하려 했습니까? 'dbms_stats.gather_schema_stats' 또는'gather_table_stats'를 사용하십시오. – Benoit

답변

1

관련 테이블에 대한 통계 수집을 시도하십시오. 이를 수행하는 가장 좋은 방법은 DBMS_STATS 패키지에서 루틴을 사용하는 것입니다. 가장 쉬운 방법은 DBMS_STATS.GATHER_DATABASE_STATS를 호출하여 매개 변수를 지정하지 않는 것입니다 (예 : 모든 매개 변수의 기본값 사용). 그러나 이것은 다소 시간이 걸릴 것입니다. 단일 테이블에 대한 통계를 수집하기 위해 DBMS_STATS.GATHER_TABLE_STATS를 사용할 수 있습니다. 'ownname'및 'tabname'매개 변수에 값을 제공해야합니다. 당신이 관심있는 테이블이 "MY_SCHEMA.MY_TABLE"라는 경우

DBMS_STATS.GATHER_TABLE_STATS('MY_SCHEMA', 'MY_TABLE'); 

이 루틴하지만 기본 값은 잘 작동합니다 다른 매개 변수가 같이 따라서, DBMS_STATS.GATHER_TABLE_STATS에 대한 호출이 보일 것이다.

데이터베이스가 여전히 원하는 테이블의 전체 테이블 스캔을 요구한다면 데이터베이스에 쿼리가 만족 스럽다고 느끼는 인덱스가 테이블에 없다는 것을 의미 할 수 있습니다. 쿼리 코드를 게시하고 문제가있는 테이블의 인덱스를 알려 주시면 추가 권장 사항을 제시 할 수 있습니다.

공유하고 즐기십시오.

관련 문제