2016-06-21 2 views
1

하이퍼 V가 큰 테이블에 달려 2008
R2
액세스 2010 레코드의 수
: 표 2에 연결 표 1, 162769, 40,2262질의, MS-액세스 2010

MS 액세스 중단하고 잠길 때까지 응답하지 않습니다. 쿼리는 다음과 같습니다.

SELECT [Civil Aircraft Registry].[Common Name], [Civil Aircraft Registry].Model, 
    [Linked History Total WO Costs].LastOfPRT, [Linked History Total WO Costs].LastOfUNT, 
    [Linked History Total WO Costs].LastOfSVP, [Civil Aircraft Registry].registration, 
    [Linked History Total WO Costs].ARG 

FROM [Civil Aircraft Registry], [Linked History Total WO Costs] 

WHERE (((Right([Civil Aircraft Registry].[registration],3)) 
     = Right([Linked History Total WO Costs].[ARG],3))); 

쿼리는 더 작은 용량으로 작동하지만 큰 레코드 크기에서는 작동하지 않습니다.

도움을 주시면 감사하겠습니다.

제프은 조인 조건에서

+0

되어 [링크 된 역사 전체 WO 비용] 쿼리를? –

답변

4

Right 기능 (귀하의 경우, WHERE 절)는 반복 테이블 스캔을 할 수있는 액세스 데이터베이스 엔진을 일으키는 원인이된다. 따라서 162,000 행 * 40,000 행에 대해 효과적으로 수행하려고 시도하는 행은 ~ 6.5   억 (6.5E + 9) 행 비교입니다.

각 테이블에 별도의 Text(3) 필드를 만들고 기존 Text 필드에서 Right(... , 3)으로 채우고 인덱싱 한 다음 새 필드에 두 테이블을 조인해야 할 수 있습니다.

0

WHERE 절의 함수를 사용하지 않는 것이 좋습니다. 성능이 저하됩니다.

이 함수가 WHERE 절에있는 경우 쿼리 성능이 저하 될 수있는 결과 집합의 모든 레코드에 대해 호출됩니다. 이렇게하면 열의 색인을 사용할 수 없게됩니다.

는 대신 계산 열을 만들 수 있습니다

SELECT [Civil Aircraft Registry].[Common Name], [Civil Aircraft Registry].Model, 
    [Linked History Total WO Costs].LastOfPRT, [Linked History Total WO Costs].LastOfUNT, 
    [Linked History Total WO Costs].LastOfSVP, [Civil Aircraft Registry].registration, 
    [Linked History Total WO Costs].ARG, right([Civil Aircraft Registration],3) AS Reg_3, 
    right([Linked History Total WO Costs].ARG,3) AS Arg_3 

FROM [Civil Aircraft Registry], [Linked History Total WO Costs] 

WHERE Reg_3 = Arg_3; 
+0

도움 주셔서 감사합니다. 두 가지 방법을 시도해보고 어떻게 작동하는지 알려 드리겠습니다. 다시 한번 감사드립니다. – Jeff