2013-01-01 3 views
0

시나리오 :SQL 계획 Intrepretation 설명 - 오라클 DB를

내가 같은 테이블에 두 개의 서로 다른 쿼리 (안 (비용, 바이트 및 리티에 대한 탭 액세스 전체와 동일한 번호) 같은 설명 계획을 받고 있어요 색인 된/아니오 PK/아니오 FK).

에 Query1 :

select * from tab1 where col1 = 'A' 

QUERY2 :

select * 
from tab1 
where col1 = 'A' 
and months_between(decode(col2,NULL,col3,col4),col5)<13; 

질문 :

QUERY2의 추가 조건을 처리하는 데 좀 더 시간이 필요하지 않음 ? 심지어 Query1을 테이블 (탭 액세스 전체)에 거의 그러한 쿼리에 대한을 필요로하는 최대 시간입니다 QUERY2의과 시간이 소요, 같은
또는
인가?

테이블 (데이터 볼륨은 항상 <입니다. 0.5 mil)은 성능 문제가 발생하지 않았으며 이는 오라클 COB에서 제공하는 Explain 계획을 수집 한 것이므로 향후 향상에 도움이됩니다. .

답변

3

테이블에 인덱스가 없다고 말하면됩니다. 옵티마이 저는 따라서 전체 스캔을 할 수 밖에 없습니다. 또한 모든 열 (select *)을 선택합니다. query2 (주로 전체 스캔의 IO)에 대한 비용은 추가 조건에 대해 아주 약간의 추가 CPU가 될 것입니다. 카디널리티는 쿼리 계획의 각 단계에서 옵티마이 저가 예측 한 행 수입니다. 마찬가지로 바이트 수는 예상 된 바이트 수입니다. query1과 query2가 동일한 수의 행을 반환하면, 즉 여분의 술어가 결과에 영향을 미치지 않으면 query1과 query2의 카디널리티 및 바이트 수는 동일하게됩니다. 서로 다르다고 생각되면 테이블 통계가 최신인지 확인해야합니다.

+0

귀하의 대답은 의미가 있습니다. 귀하의 회신을 바탕으로, 나는 두 가지 질문을 가지고 있습니다. 1. 소량의 여분의 CPU라고해도 과언이 아닐지라도 어떻게 측정 할 수 있습니까? 내 테이블에 더 많은 행이 있고 두 쿼리 모두 동일한 C-B-C를 사용하는 동일한 Explain 플랜이있는 경우 두 쿼리의 retieved 행이 동일한 성능이 될 것이라는 점에서 사용자를 오도하는 것입니까? 나는 그것이 여기의 경우가 아닐 것이라고 생각한다. 설명 해주십시오. 2. 또한 위의 답에서 카디널리티가 의미하는 바를 설명하십시오. '아니요. '구별되는'행 '의 – Lakshman

+0

위의 주석에서 두 번째 질문을 무시하십시오. 다음과 같은 스택 오버플로 [link] (http://stackoverflow.com/questions/13838173/how-to-consider-explain-plan-as-good-oracle-10g?rq=1)는 오라클의 계획 기능에 대한 심층적 인 이해. – Lakshman

+1

대략 사용 된 CPU는 쿼리 계획에서 볼 수 있습니다 (각 쿼리 단계의 총 비용 대비 %). IO의 비용과 비교할 때 매우 작거나 반올림 될 가능성이 있습니다. 선택 목록에 정교한 계산을 포함 시키면 CPU가 증가 할 수 있습니다. "Cardinality"는 query = row count = num 행, 같은 일의 각 단계에서 결과 집합의 크기입니다. 쿼리 계획은 예상이므로 숫자는 통계에 따라 대략 정확할 것입니다. 정확한 값을 원할 경우 검색어를 추적하고 예를 들어 정확히 무슨 일이 있었는지 확인하려면 TKProf. –