2011-08-11 3 views
0
SELECT MAX (tran_date) 
FROM abc 
WHERE p_id = p_p_id 
AND flag = 'Y' 
AND ( ( p_c_number IS NULL 
      AND c_number IS NULL 
      ) 
     OR (c_number = p_c_number) 
     ) 
AND ( ( p_m_number IS NULL 
      AND m_number IS NULL 
      ) 
     OR (m_number = p_m_number) 
     ) 
AND ( ( p_s_number IS NULL 
      AND s_number IS NULL 
      ) 
     OR (s_number = p_s_number) 
     ); 

, 난이 쿼리이 검색어를 최적화 하시겠습니까? 내가 RDBMS로 Oracle을 사용하고

  1. 계획 SELECT 문 ALL_ROWSCost을 최적화 할 : 357 바이트 : 39 카디널리티 : 1
    2 SORT AGGREGATE 바이트 : 39 카디널리티 : 1
    1 표 ACCESS FULL TABLE abc 방송 비용 : 357 바이트 : 312 카디널리티는 8
+0

RDBMS의'EXPLAIN' 또는 유사한 명령을 사용하여 쿼리의 예상 실행 계획을 보았습니까? 대부분의 열에 대한 색인을 작성하면 도움이 될 것입니다. 쿼리 계획은 어떤 항목을 볼 수 있도록 도와줍니다. – cdhowie

+0

@cdhowie : oracle에서 실행 계획을 검색하는 것은 mysql과 마찬가지로 'EXPLAIN'을 추가하는 것보다 약간 어렵습니다. 그러나 실제로 각 최적화는 계획 검사로 시작해야합니다. – zerkms

+0

설명 플랜 – gaurav

답변

3
  • 당신이 쿼리 계획을 게시 할 수 있습니까?
  • 테이블에 어떤 인덱스가 있습니까?
  • 참조 중 열 이름과 바인드 변수는 무엇입니까? 내 생각 엔 P_IDFLAG, C_NUMBER, M_NUMBERS_NUMBERABCP_P_ID, P_C_NUMBER, P_M_NUMBERP_S_NUMBER 바인드 변수하지만 그냥 추측 그 열이 있다는 것입니다.
  • 다양한 조건이 얼마나 선택적입니까? 특히, 테이블의 행 중 어떤 부분에 특정 P_ID 값이 있습니까? 'Y'의 어떤 부분이 FLAG입니까?
+0

: 인덱스가 존재 on 플래그에서 p_id가 null이 아니고 c_number, m_number 및 s_number에 제약 조건이 없으면 위 커서의 쿼리로 전달됩니다. – gaurav

+0

p_id와 flag 값이 널이 아니기 때문에 모든 행에 존재합니다. – gaurav

+0

@ gaurav - 테이블에 인덱스가 하나 뿐이므로 'FLAG'에 대한 인덱스가 있습니까? 'P_ID'에 대한 색인이 없습니다? 아니면 테이블에있는 다른 열 중 하나라도? 테이블에 몇 개의 행이 있습니까? 얼마나 많은 'FLAG' 값이'Y '입니까? –

관련 문제