2016-11-03 6 views
3

안녕하세요. 내 의견에 문제가 있습니다.select 문을 사용하여 Oracle SQL보기 위치 :

나는이 문장을 볼 시간

where date=(select d from user_date_table) 

이 결과에 대한 잘 작동하지만 perfomance가 매우 느립니다을 사용합니다.

다음 작업을 수행 할 때 :

where date=to_date(

이 많이 빠릅니다하지만 난 볼이 값을 제공해야하기 때문에이 여기에 작동하지 않습니다.

내가 할 수 있는게 더 있습니까?

지금 당장 필자는 값을 제공하는 package_name.get_user_date 함수가있는 패키지로 테스트했습니다. 그러나 이것은 또한 매우 느립니다.

이 쿼리를 더 빨리 수행 할 수있는 다른 작업이 있습니까?

감사합니다.

+1

"이것은 훨씬 빠르지 만보기에이 값을 주어야하기 때문에 여기서는 효과가 없습니다."... ... 이해가 안됩니다. 여기서 의미하는 바가 있습니다. 쿼리에 대한 설명 계획을 수행 했습니까? ? subselect를 조인으로 변환 할 수 있습니다. – sers

+3

전체 쿼리, 관련 테이블 정의 및 두 쿼리의 실행 계획을 보여줍니다. [** Formatted **] (http://stackoverflow.com/editing-help#code) text please, [스크린 샷 없음] (http://meta.stackoverflow.com/questions/285551/why-may-i) 285557 # 285557) –

+0

'user_date_table'의 'd'열에 하나의 날짜 만 있습니까? 믿기 ​​어렵다. 둘 이상의 날짜가있는 경우 쿼리가 작동하지 않습니다. 그래서, 그것이 효과가 있다면, 당신은 우리에게 당신의 진짜 질문을 보여주지 않습니다. 왜 안돼? 어쨌든 : 하위 쿼리에서'(TO_DATE (d, '......')를 선택하십시오 .... 어디에서 ....)' – mathguy

답변

0

시도해 볼 수있는 방법은 두 가지가 있습니다. user_date_table에 중복 날짜가 있습니까?

그렇다면 where 절에 넣지 않고 쿼리의이 테이블에 조인 할 수 있습니다. 만약 그렇다면

는, 당신은 존재 yourTable t 에서 선택 ... 에 뷰에서 쿼리를 변경할 수 있습니다 (user_date_table UDT 에서 선택 을 * 곳 udt.d = r.date )

또한 user_date_table에 어떤 색인이 있는지 확인하고 확인하십시오. 어쩌면 to_date (d)에 대한 함수 기반 인덱스가 있는데 이것이 더 빨리 작동하는 이유입니다.

관련 문제