2011-04-28 4 views
2

약 51 개의 열과 25 백만 개의 레코드가있는 Oracle 10g에 테이블이 있습니다. 테이블에서 세 개의 열을 추출하기 위해 간단한 select 쿼리를 실행하면 182k 주위에 너무 높은 비용이 발생합니다. 그래서 비용 효과를 줄여야합니다. 그것을 줄일 수있는 방법이 있습니까?select 문의 비용을 절감하는 방법은 무엇입니까?

검색어 :

select a,b,c 
from X 

A - 당신이 알고있는 경우

답변

2

음 ... 당신 만의 부분 집합을 필요로 VARCHAR2

TIA - VARCHAR2
C -
B를 숯불 WHERE 절을 던지면 분명히 도움이 될 것입니다. 정말로 2 천 5 백만 건의 레코드가 모두 필요하고 테이블이 적절하게 색인되어 있다면, 실제로 할 수있는 일이별로 없다고 말할 수 있습니다.

3

이와 같은 경우 2500 만 개의 레코드를 쿼리해야하는 이유를 모른 채 좋은 조언을하기가 어렵습니다. @ Ryan이 말했듯이 일반적으로 WHERE 절이 있습니다. 아니면 다른 테이블이나 다른 것으로 결과를 추출하는 것일까 요?

성능에 어떤 차이를 만들 수있는 유일한 방법은 커버 인덱스 (즉, a, b, c) 일 것입니다. 쿼리는 빠른 전체 인덱스 스캔을 수행 할 수 있으며 검색된 블록 당 더 많은 레코드를 얻을 수 있습니다 .

0

예, jeffrey Kemp와 같은 선택의 목적을 더 잘 말해줍니다.

보통 선택하면 필드에 주로 할 수있는 인덱스를 제공하고 인덱스에 대한 테이블 통계 (DBMS_STATS.GATHER_TABLE_STATS)를 제공하고 각 필드의 통계를 확인하여 인덱스가 올바른지 확인하십시오 (읽기 : http://bit.ly/qR12Ul).

다른 테이블로로드해야하는 경우 커서를 사용하여 각 실행 레코드로드를 대량 삽입 (FORALL 기술)을 통해 테이블로 제한하십시오.

관련 문제