다소 복잡한 Oracle 쿼리가 있는데 완료하는 데 약 30 분이 걸립니다. 쿼리의 느린 부분을 취하여 별도로 실행하면 몇 초 안에 완료됩니다. 다음은 격리 된 쿼리에 대한 SQL 모니터 보고서의 스크린 샷입니다.
전체 쿼리의 일부로 실행될 때 동일한 논리가 있습니다.
색상은 두 스크린 샷의 동일한 표에 해당합니다. 느린 쿼리의 경우 Oracle은 MERGE JOIN
에서 동일한 조건을 갖지 않는 두 테이블 간을 수행합니다 JOIN
. 그 결과, 약 1 억 5 천만개의 중간 행이 불필요하게 처리된다.
쿼리 힌트 또는 다시 쓰기 로이 문제를 해결할 수는 있지만 가능한 한 많은 근본 원인을 이해하여 나중에이 문제를 피하고 버그 보고서를 Oracle에 제출할 수 있기를 원합니다. 잘못된 계획을 얻을 때마다 UNPIVOT
쿼리 텍스트가 UNION ALL
계획에서 로 변환됩니다 . 추가 조사를 위해 해당 쿼리 변환이 발생하지 않도록하고 싶습니다. 이 변환의 이름을 찾을 수 없습니다. 또한 쿼리 힌트 또는 밑줄 매개 변수를 찾지 못했습니다. 개발 서버에서 테스트 중이므로 모든 것이 진행됩니다.
의 쿼리 변환을 막기 위해 할 수있는 일 UNPIVOT
이 UNION ALL
있습니까? Oracle 12.1.0.2에 있습니다.
IP 이유로 인해 쿼리, 테이블 이름 또는 데이터를 공유 할 수 없습니다. 나는 단순한 생식을 만들 수 없었다. 그렇게 말하면서 왜 질문에 대답하기 위해 정보가 필요한지 불분명합니다. 다음 은 UNION ALL로 구현 된 동일한 쿼리와 함께 UNPIVOT 쿼리의 예입니다.