MS-Access SQL查询性能 - 慢

时间:2018-05-29 21:46:47

标签: sql ms-access query-performance

我有一个从其他查询中提取数据和连接的查询。最终查询大约需要8分钟才能运行。是否有更有效的方法来查询基于查询构建的查询中的信息(例如创建包含第一个查询结果的表或构建索引 - 或者??)。

我的最终查询很简单:

SELECT Filtered_ZFEWN.[Base 8], Filtered_ZFEWN.Notification, Filtered_ZFEWN.
[Service Product], Filtered_ZFEWN.[Product Hierarchy]
FROM Filtered_ZFEWN RIGHT JOIN 
    Notifications_by_Base_8 ON Filtered_ZFEWN.[Base 8] = 
    Notifications_by_Base_8.[ZFEWN Base 8]
WHERE Notifications_by_Base_8.[Product Hierarchy] IN 
    (SELECT Notifications_by_Base_8.[Product Hierarchy] 
     FROM Notifications_by_Base_8 
     WHERE Notifications_by_Base_8.[Product Hierarchy] NOT LIKE "*MISC*");

此查询从其他6个查询中提取数据(您可以看到它明确地从两个查询中提取,但其他查询也是基于4个查询构建的)。我正在寻找性能改进。

2 个答案:

答案 0 :(得分:0)

通过在开头添加通配符 Like "*MISC*", 您正在使用子查询上的任何索引停止Access。

这会在较大的数据集上显着减慢速度。

您可以在查询链中移动前面的过滤,还是删除然后启动通配符?或者在没有Not Clause的情况下构建一个In子句?

答案 1 :(得分:0)

子查询(在IN关键字之后的查询)是不是冗余并始终返回相同的结果? - Peeyush 15小时前

@peeyush你是对的 - 这就是答案。我删除了select子查询,只保留了NOT LIKE“misc”部分,并在8秒内运行。谢谢!!! - Analyst123456789 11秒前编辑