다음과 같은 쿼리를 실행하려면 어떻게해야합니까? (우리는 연구 최적화를 위해 실행을 중단했지만 우리 중 누구도 DB 전문가가 아닙니다.) 세트 기반 제외를 수행하는 것이 매우 간단해야하는 것처럼 보입니다. 맞습니까?이 쿼리는 서브 쿼리의 합계보다 훨씬 길게 실행되는 이유는 무엇입니까?
SELECT
field
FROM
(subquery that returns 1173126 rows in 20 seconds)
WHERE
field NOT IN (subquery that returns 3927646 rows in 69 seconds)
이 정보에 도움이 될만한 정보가 있으면 어떻게해야합니까?
는 (실제 쿼리는 그것에 대해 위험한 특정 뭔가 문제를 일으키는있을 경우 다음과 같습니다.)SELECT blob FROM (
SELECT a.line1 + '|' + substring(a.zip,1,5) as blob
FROM registrations r
JOIN customers c ON r.custId = c.Id
JOIN addresses a ON c.addressId = a.Id
WHERE r.purchaseDate > DATEADD(year,-1,getdate())
GROUP BY a.line1 + '|' + substring(a.zip,1,5)) sq
WHERE blob NOT IN (
SELECT a.line1 + '|' + substring(a.zip,1,5) as blob
FROM registrations r
JOIN customers c ON r.custId = c.Id
JOIN addresses a ON c.addressId = a.Id
WHERE r.purchaseDate BETWEEN DATEADD(year,-5,getdate()) AND DATEADD(year,-1,getdate())
GROUP BY a.line1 + '|' + substring(a.zip,1,5))
예, 우리는 "새로운"고객을 찾고 있으며 중복 된 line1, zip 조합이 ID 위에 있습니다. – clweeks
@clweeks : 같은 주소에서 3 년 전 구매했지만 다른 'id'로 구매 한 경우 새로운 것으로 간주되지 않습니까? – Quassnoi
수정하십시오.세대 중 누군가가 구매했거나 데이터가 잘못 입력되었을 수 있으며 새로운 구매를 한 주소/가구를 찾고 있습니다 ('신규'에는 5 년 전에 구입 한 사람이 포함되지만 그 이후는 포함되지 않음) . – clweeks