我正在生成含有大量预先存在的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