【发布时间】:2011-08-09 16:58:58
【问题描述】:
我正在为包含在大型预先存在的 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'
)
有没有办法重构第二个查询以使其花费几分钟而不是一个小时?
【问题讨论】:
-
我认为 CustomerId 字段在两个表中都有索引?
-
您是否尝试过 SELECT DISTINCT CustomerId FROM ProductSales WHERE Product = 'BLUE' 减去 SELECT CustomerId FROM ProductSales WHERE Product = 'RED'。我见过它确实加快了查询的情况,但是 YMMV
-
@Marc B:这里只有一张表,但 CustomerId 已在其上编入索引。
标签: ms-access query-optimization