我正在生成含有大量預先存在的Access數據庫中的數據報告(〜以後緊湊&修復500 MB),和我有一個緩慢的子查詢的麻煩。很慢的子查詢
該數據庫有一個大表,包含了每一位顧客的購買記錄。這是一個簡單的查詢,它可以查找購買了藍色小部件的客戶。它在幾秒鐘內完成並返回大約一萬條記錄。
SELECT DISTINCT CustomerId
FROM ProductSales
WHERE Product = 'BLUE'
下面是一個查詢,它試圖找到購買了藍色小部件但不是紅色小部件的客戶。大約需要一個小時才能運行。
SELECT DISTINCT CustomerId FROM ProductSales
WHERE Product = 'BLUE'
AND CustomerId NOT IN (
SELECT CustomerId
FROM ProductSales
WHERE Product = 'RED'
)
有沒有辦法重構第二個查詢,使其花費幾分鐘而不是一個小時?
我相信客戶ID字段上有索引兩個表中? –
你試過SELECT DISTINCT客戶編號FROM ProductSales WHERE產品= 'BLUE' 減SELECT客戶編號FROM ProductSales WHERE產品= '紅'。我已經看到它真正加快了查詢的情況,但情況因人而異 –
@Marc B:這裏有只有一個表,但客戶ID被索引就可以了。 – James