次のようなクエリは、どのように実行するのに16時間以上かかることがありますか? (私たちは最適化の研究を中止しましたが、私たちの誰もDBの専門家ではありません)。セットベースの除外を行うのは非常に簡単なようですね。このクエリはサブクエリの合計よりもずっと長く実行されるのはなぜですか?
SELECT
field
FROM
(subquery that returns 1173126 rows in 20 seconds)
WHERE
field NOT IN (subquery that returns 3927646 rows in 69 seconds)
この他に、あなたに十分な情報を提供して助けてくれるものはありますか?
(問題を引き起こしていることについてtricksyと具体的な何かがあります場合には、実際のクエリは、次の。)
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))
ええ、私たちは "新しい"顧客を見つけており、IDの上に重複した1行目のZIPの組み合わせがあります。 – clweeks
@clweeks:同じアドレスから3年前に購入した「id」が違うと、それは新しいものとしてカウントされません。 – Quassnoi
正しい。世帯内の他の人が購入した可能性があります(またはデータのキーが間違っている)。新しい購入をした住所/世帯を探しています(5年以上前に購入した人が「新規」ですが、 。 – clweeks