큰 기존 Access 데이터베이스 (~ 012 메가 바이트 ~ 수리 후 ~ 500MB)에 포함 된 데이터에 대한 보고서를 생성하고 있으며 느린 하위 쿼리에 문제가 있습니다. ."NOT IN"을 사용할 때 매우 느린 하위 쿼리
데이터베이스에는 모든 고객 구매 기록이있는 큰 테이블이 있습니다. 다음은 파란색 위젯을 구입 한 고객을 찾는 간단한 쿼리입니다. 몇 초 내에 완료되고 약 1 만 개의 레코드가 반환됩니다.
SELECT DISTINCT CustomerId
FROM ProductSales
WHERE Product = 'BLUE'
파란색 위젯을 구입했지만 빨간색 위젯을 구입 한 고객을 찾으려는 검색어입니다. 달리는 데는 한 시간 정도 걸립니다.
두 번째 쿼리를 리팩토링하여 한 시간이 아닌 몇 분이 걸리는 방법이 있습니까?
CustomerId 필드에 두 테이블의 인덱스가 있다고 가정합니까? –
시도해 보셨습니까? 선택 DISTINCT CustomerId FROM ProductSales WHERE Product = 'BLUE'SELECT CustomerId FROM ProductSales WHERE Product = 'RED'. 나는 쿼리가 실제로 속도를 높이는 경우를 보았지만 YMMV –
@Marc B : 여기에는 표가 하나 뿐이지 만 CustomerId는 색인이 생성됩니다. – James