2014-02-17 2 views
0

Oracle 테이블 6 개, 모든 내부 조인에 대한 쿼리가 있습니다.
조건을
WHERE tablex.MsgId > 13298690과 같이 실행하면 대답은 즉각입니다.
조건을
WHERE tablex.MsgId > Dlookup("ParamLong","tblParamSave","ParamName='SomeName'")과 같이 실행하면 1 분이 소요됩니다.
물론 Dlookup은 13298690을 반환하므로 두 쿼리가 기능적으로 동일합니다. 이상하게도 흥미롭게쿼리 조건의 Dlookup : slow

+1

제 생각에는 두 번째 경우의 모든 행에 대한 함수를 평가하는 반면 첫 번째 경우에는 인덱스를 조회하는 것입니다. – user2989408

+0

가능한 해결 방법은 함수를 평가하고 결과를 변수에 저장 한 다음 비교를 위해 변수를 사용하는 것입니다. – user2989408

+0

쿼리에서 VBA 함수를 사용하지 않는 것이 좋습니다. ADO 나 SQL Pass Through 쿼리를 사용하면 성능 문제가 발생하는 것이 좋습니다. – HK1

답변

1

, '강한 타자'에 대한 기준 식 :

WHERE tablex.MsgId > CLng(Dlookup(...)) 

쿼리의 전체 속도를 복원.