2014-03-26 4 views
0

저는 관계형 데이터베이스에 대한 온라인 수업을 듣고 SQL 쿼리를 연습하고 그 과정에서 몇 가지 업무 관련 문제를 해결하기 위해 Access 데이터베이스 (처음으로)를 만들었습니다. 데이터베이스는 3 개의 테이블로 구성되며, 기본 테이블은 지점/상점/메뉴 항목 레벨 (예 : 가장 낮은 수준의 세부 사항)에 회사 전체 판매 요약 정보를 기록하는 데 사용되고 데이터베이스는 현재 1.3GB 인 3 개의 데이터 기간으로 구성됩니다 하나의 테이블에 4,262,421 개의 레코드가 있습니다. 나는 다음과 같은 쿼리를 실행하려고 시도 할 때까지비효율적 인 쿼리 또는 Access의 한계에 도달 했습니까?

모든 것이 잘 갔다 :

SELECT P1.*, P13.[Price?] AS P13Price 
FROM (SELECT * FROM PBASE WHERE Period = 13) AS P13, (SELECT * FROM PBASE WHERE Period = 1) AS P1 
WHERE P1.Key = P13.Key and P1.[Price?]<>P13.[Price?]; 

는, 큰 테이블이 PriceAccData하고 내가 먼저 PriceAccData에 필드를 추가하는 쿼리 (PBASE를) 실행 설명하기를 그 한 기간에서 다음 기간으로 가격 변경을 비교하는 열쇠로 사용할 수 있습니다 (지점, 상점, 메뉴 항목의 조합). 그런 다음 하위 쿼리를 사용하여 2013 년 (기간 13)의 마지막 기간과 2014 년 (기간 1)의 첫 기간을 만들었습니다 .... 거기에서 가격이 한 기간에서 다음에 Where 절을 추가하십시오.

쿼리를 작성하거나 비교를 수행하는보다 효율적인 방법이 있습니까? 한 번에 하나의 브랜치에서 작동하지만 오랜 시간이 걸리며 둘 이상을 실행하면 Access가 잠 깁니다. 분기.

답변

1

하위 쿼리는 항상 비효율적 인 것으로 알려져 있으며 최후의 수단으로 사용됩니다. 일반적으로 효율성을 높이기 위해 테이블을 조인하는 방법이 있습니다.

SELECT ...... FROM PBASE P13 INNER JOIN PBASE P1 ON P13.KEY=P1.KEY 

이 당신이 당신의 평등 기준을 확인할 수 있습니다 당신에게이 개 기간에 대한 데이터를 제공합니다 : 나는의 라인에 뭔가를 제안한다. 그게 더 도움이 필요하면 알려주세요.

+0

팁을 주셔서 감사합니다. Don, 그 결과는 훨씬 더 신속하게 반환되었지만 .... 지금 문제는 쿼리가 실행 된 후 결과입니다. 화면에 나는 회전하는 동안 액세스를 잠그는 몇 초마다 회전하는 파란색 원을 얻습니다. 왜 그런 일이 일어날 지 또는 어떻게 멈추는 지 알기 원하십니까? 쿼리가 완료되어 화면에 내 결과가 표시되지만이를 사용할 수없는 것은 매우 실망 스럽습니다. – Hurst2008

+0

몇 개의 레코드가 반환됩니까? –

+0

일반적으로 RAM (메모리)을 사용하기 때문에 필요한 행을 모두 선택하지 않습니다 (특히 너무 많은 경우). 그래서 줄이 정말로 많으면, 그것이 회전하는 파란색 원을 가져 오는 것 같습니다. 이 상황이 발생하는 동안 작업 관리자에서 Access에 대한 CPU 및 RAM 사용률을 살펴볼 수 있습니다. –

관련 문제