내가 모든 행의 반환하는 초 소요 (여러 개의 데이터베이스 링크를 통해 뷰의 여러 레이어를 사용하여) 매우 복잡 볼 수 있습니다. 그러나 별개의 행을 요구할 때 상당히 많은 시간이 걸립니다. 4 분 후 나는 기다리지 않았다. 즉,이 방법은, 헤이별개의 마지막
select a, b from compicated_view; -- takes 1 sec (returns 6 rows)
select distinct a, b from compicated_view; -- takes at least 4 minutes
내가 꽤 이상한 것을 발견,하지만 :
가능한 한 내 자신을 명확하게합니다. 오라클은 그 쿼리를 계획 할 때 뭔가를 망쳤다 고 생각합니다. 오라클이 뚜렷한 선택없이 먼저 선택을 완료하도록 한 다음, 결과에서 "select distinct *"를 수행하는 방법이 있습니까? 최적화 도구에 대한 힌트를 살펴 보았지만 고유가 적용되는 순서를 암시하는 것에 대해서는 아무 것도 찾을 수 없습니다 (처음으로 쿼리를 최적화하는 것은 처음입니다 : - /).나는 오라클 10g EE에서 Oracle SQL Developer를 사용하고 있습니다.
는 "모든"행은 1 초 실행에서 반환 된 당신에게 확실합니까? SQL 개발자와 작업 할 때 엔진은 부분 레코드 집합을 반환하고 표시합니다. 아래로 스크롤하면 더 많은 레코드를 사용할 수있게되고 디스플레이로 수정됩니다. 따라서 레코드가 반환 된 것처럼 보입니다. 실제로는 부분 집합 만 있습니다. – xQbert
@xQbert 그래, 그냥 6 행이야. – dijxtra
둘 다 실행 계획이 어떻게됩니까? – xQbert