gpt4 book ai didi

ms-access - 使用 "NOT IN"时子查询非常慢

转载 作者:行者123 更新时间:2023-12-04 10:56:35 25 4
gpt4 key购买 nike

我正在为大型预先存在的 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'
)

有没有办法重构第二个查询以使其花费几分钟而不是一个小时?

最佳答案

Access 的数据库引擎无法使用 Not In 的索引,所以它肯定会很慢。使用 CustomerId 上的索引,此查询应该快得多,因为数据库引擎可以使用该索引。

SELECT DISTINCT blue.CustomerId
FROM
ProductSales AS blue
LEFT JOIN
(
SELECT CustomerId
FROM ProductSales
WHERE Product = 'RED'
) AS red
ON blue.CustomerId = red.CustomerId
WHERE
blue.Product = 'BLUE'
AND red.CustomerId Is Null;

你也可以试试 Not Exists方法,但不能保证索引的使用。另外,请参阅下面 David Fenton 的评论,其中更详细地讨论了性能影响。

关于ms-access - 使用 "NOT IN"时子查询非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6999924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com