리팩터링 작업을 수행하는 다소 복잡한 쿼리를 상속 받았습니다.인라인 뷰에서 술어를 사용하면 쿼리 속도가 느려질 수 있습니까?
이 과정에서 개인적 취향으로 인해 수행 한 작업 중 하나는 ANSI-99 조인 구문을 모두 "내부 조인"및 "왼쪽 외부 조인"문에서 쿼리의 조건부로 변경하는 것이 었습니다. 나는 2 가지의 매우 이상한 것들을 알아 차렸다.
- "INNER JOIN ..."구문에서 조인을 변경하면 Explain 플랜이 변경되었습니다. ANSI 99 구문을 사용하여 oracle은 조인중인 열에 대한 전체 테이블 스캔을 수행했습니다. 조인 구문을 변경 한 후 이제 술어 푸시를 수행합니다. 조인 구문이 Explain 계획을 변경하는 이유는 무엇입니까?
- 인라인보기를 밀어 넣는 조건부로 인해 실제로 쿼리의 처리 속도가 상당히 느려졌습니다. 조인을 변경하기 전에 실행중인 쿼리가 약 3 초. 이제 9 초가 걸립니다. 솔직히 말해서, 나는 계획을 설명하는 것에 상당히 익숙하지 않기 때문에 쿼리의 구조 조정이 다른 이유로 느려질 가능성이 완전히 있습니다. 그러나 궁극적으로 제 질문은 "쿼리가 너무 느려지도록 인덱싱 된 열을 조건부로 밀어 넣을 수 있습니까? 그렇다면 이유는 무엇입니까?"
답장을 주셔서 감사합니다, 내 사과이 명확하지 않은 경우 ...
이전 및 이후 쿼리를 게시하십시오. 변경 사항이 "구문 변경"이상의 것일 수 있습니다 - 쿼리의 의미가 변경되거나 (또는 최적화 프로그램에서 사용 가능한 정보를 추가/제거하는 경우) 영향을 미칠 수 있습니다 상당히 계획. –