2016-06-27 6 views
0

Access를 데이터베이스로 사용하는 레거시 애플리케이션을 최적화하려고합니다. 일부 쿼리의 문제는 실행 시간 후에 아무 것도 반환하지 않는다는 것입니다. 조인을 하나씩 추가하여 문제를 파악하려고합니다. 이제는 아무것도 반환하지 않고 영원히 실행하지 않는 쿼리 중 하나가 발생했습니다. SubQueries를 사용하여 데이터를 가져 오는 Left Join을 추가 한 후 쿼리가 이와 같이 동작합니다.
어떤 제안 진심으로 감사하겠습니다 ..액세스 쿼리가 영원히 실행됩니다.

답변

1

집계 된 열 (MaxOfColumn)에 연결하는 것이 효과가 없을 수 있습니다.

제안 : [qry Aggregate Query]의 결과를 임시 테이블에 삽입하십시오. 문제가되는 쿼리 대신 해당 테이블에 가입하십시오.

미리 SELECT INTO 쿼리를 사용하거나 이전의 임시 테이블을 삭제하거나 INSERT INTO 쿼리를 사용하여 미리 임시 테이블을 비울 수 있습니다.
당신이 원칙적으로 작업이 있으면

편집, 내가 추가 쿼리 (INSERT INTO) 대신 테이블 만들기 쿼리를 사용하는 것이 좋습니다.

따라서 임시 테이블을 그대로 유지하고 JOIN에 사용하는 필드에 인덱스를 추가하여 성능을 더욱 향상시킬 수 있습니다.

메인 쿼리를 열려면 다음 VBA에서 수행

' Empty temp table 
CurrentDb.Execute "DELETE * FROM Temptable" 
' Run Append query 
CurrentDb.Execute "NameOfYourAppendQuery" 
' Open main query 
DoCmd.OpenQuery "MainQuery" 
+0

@Lara : 독서를하고 시험해보십시오. 그렇게 어렵지 않습니다. 쿼리 유형 : http://www.fmsinc.com/tpapers/queries/#Action_Queries '[qry List ASDT tbl ASDT P1T_AGENT_STAFF 액티브 MAX END DATE]의 복사본을 만들어 ** Make Table ** 쿼리로 변경하십시오. 그것을 실행하십시오. 대신 기본 쿼리에서 결과 테이블을 사용하십시오. – Andre

+0

Andre.I 링크를 만들어 주셔서 감사합니다. 쿼리에서 Make Table.Now를 실행합니다. LEFT JOIN [MakeTableName] ON [tbl ADW] .H10_STAFF_PARTY_ID = [MakeTableName] .STF_STAFF_PARTY_ID)'와 같은 조인을 수행해야합니까? 올바른 방법인가요? – Lara

+0

@Lara : 예, 현재 [[Qry List ASDT tbl ASDT P1T_AGENT_STAFF 액티브 MAX END DATE]'가 있으면,'[MakeTableName]'으로 대체하십시오. – Andre

1

를 추가해보십시오 인덱스를 테이블에 이러한 열에 :

[tbl ASDT P1T_AGENT_STAFF] - (STF_END_EFF_DT) 
[qry List ASDT tbl ASDT P1T_AGENT_STAFF Active MAX END DATE] - (maxOfSTF_END_EFF_DT) 

당신도이 열을 사용하지 않는 것처럼, 당신은 이미 maxOfSTF_END_EFF_DT에 사용할 수있는 것이 보이지만 , 왜이 테이블에 가입해야합니까 ??

+0

을 나는 STF_END_EFF_DT' Column.'STF_END_EFF_DT' 이미 지수'QRY 목록 ASDT TBL ASDT P1T_AGENT_STAFF 활동 MAX의 END입니다'얻기 위해 가입하고 DATE'는 하위 쿼리입니다. 여기에 누락 된 것이 있습니까? – Lara

+0

하지만 'STF_END_EFF_DT' ='maxOfSTF_END_EFF_DT'가 아닌가요? 이미이 정보가 있습니다. – sagi

관련 문제