2012-10-15 1 views

답변

4

일반적으로 오라클은 데이터를 반환하기 전에 전체 결과 집합을 구체화 할 필요가 없습니다. 물론 결과 집합을 정렬하여 데이터를 반환하기 전에 구체화해야하는 경우가 있습니다). 쿼리를 통해 전체 결과 세트가 구체화 될 필요가 없다고 가정하면 Oracle은 클라이언트 프로세스가 TOAD 또는 SQL * Plus 또는 작성한 JDBC 애플리케이션인지 여부에 관계없이 클라이언트 프로세스로 데이터를 반환하기 시작합니다. 클라이언트가 더 많은 데이터를 요청하면 Oracle은 쿼리를 계속 실행하고 결과의 다음 페이지를 반환합니다. 이를 통해 TOAD는 오라클이 전체 쿼리를 실행하고 마지막 행을 클라이언트에 반환하는 데 많은 시간이 걸릴지라도 상대적으로 빠르게 첫 500 행을 반환 할 수 있습니다.

+0

감사합니다. 그러나 나는 테이블에서 select *를 수행하여 뷰를 생성 한 다음 뷰에서 select *를 수행하면 훨씬 더 오랜 시간이 걸리는 것을 볼 수 있습니다. 왜 이런거야? – Victor

+0

@Kaushik - 차이가 있어서는 안됩니다. 보기와 관련된 다른 쿼리 계획을보고 있습니까? 어느 쪽 쿼리에 술어 ('WHERE' 절)가 있습니까? –

+0

죄송합니다. 내가보기에 틀린 몇 가지 복잡한 술어가 있습니다. 문제가 있습니다. – Victor

0

Toad는 성능을 위해 처음 500 행만 반환하지만 Oracle 인터페이스 (예 : JDBC)를 통해 해당 쿼리를 실행하면 전체 결과가 반환됩니다. 가장 좋은 추측은 설명 계획이 레코드의 하위 집합을 가져 오지 않는 경우 결과를 보여줍니다. 그게 내가 사용하는 방법이야. 나는 이것에 대한 나의 경험 이외에이 근원이 없다.

+0

감사합니다. 하지만 내 질문은 심지어 500 행을 반환하는 경우에도 결과가 너무 빨리입니까? 전체 레코드 집합을 가져 오지 않고 500 행을 가져 옵니까? – Victor

+0

좋은 구별, 미안 해요. 위의 대답은 그것을 설명합니다. –