Access SQL查询优化,添加分组依据时速度较慢
所以,我有两个问题。第一,我是否真的采取了正确的方法来提高效率?我正在尝试创建一个名为Type的新列,根据两个表的字段是否匹配,输出不同的名称。这是一个嵌套的IF语句。查询很容易在2-3秒钟内完成,但我希望按照ItemName和Type进行分组,因为有很多重复项。这样做之后,查询没有完成,超时,并在10分钟的尝试后声称过于复杂。我也尝试过使用DISTINCT和FIRST,但运气不太好。在总体方案中,我希望将此查询与其他查询相结合,并创建按类型分组的运行总和。因此,在这个查询中,我可以执行分组操作以使最终查询正常工作,这一点很重要。以下是查询:Access SQL查询优化,添加分组依据时速度较慢,sql,ms-access,group-by,query-optimization,Sql,Ms Access,Group By,Query Optimization,所以,我有两个问题。第一,我是否真的采取了正确的方法来提高效率?我正在尝试创建一个名为Type的新列,根据两个表的字段是否匹配,输出不同的名称。这是一个嵌套的IF语句。查询很容易在2-3秒钟内完成,但我希望按照ItemName和Type进行分组,因为有很多重复项。这样做之后,查询没有完成,超时,并在10分钟的尝试后声称过于复杂。我也尝试过使用DISTINCT和FIRST,但运气不太好。在总体方案中,我希望将此查询与其他查询相结合,并创建按类型分组的运行总和。因此,在这个查询中,我可以执行分组操作
SELECT Inventory_All.ItemName,
IIF(Inventory_All.[ItemName]=Products.[QB Assembly Name], "Assembly Part",
IIF(Inventory_All.[ItemName]=Products.[QB Service Part Name],"Service Part",
IIF(Inventory_All.[ItemName]=Components.[QB Component Name],Components.Type,"Other") )) AS Type
FROM
(Inventory_All LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Assembly Name] OR Inventory_All.ItemName=Products.[QB Service Part Name]) LEFT JOIN Components ON Inventory_All.ItemName=Components.[QB Component Name];
我读到其他人也有类似的问题,我尝试了索引,但似乎没有帮助。似乎我需要重新创建这个查询,其中GROUPBY函数几乎不需要处理那么多。不过,我不确定这种形式的SQL和GROUPBY是如何工作的。关于简化查询以使GROUPBY(或类似函数)工作,有什么建议吗
谢谢你的帮助。也许有以下几行:
SELECT Inventory_All.ItemName, Type
FROM (
SELECT "Assembly Part" As TYPE
FROM Inventory_All
LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Assembly Name]
UNION
SELECT "Service Part" As TYPE
FROM Inventory_All
LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Service Part Name]
UNION
SELECT "Other" As TYPE
FROM Inventory_All.ItemName=Components.[QB Component Name]) As x
也许是这样的:
SELECT Inventory_All.ItemName, Type
FROM (
SELECT "Assembly Part" As TYPE
FROM Inventory_All
LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Assembly Name]
UNION
SELECT "Service Part" As TYPE
FROM Inventory_All
LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Service Part Name]
UNION
SELECT "Other" As TYPE
FROM Inventory_All.ItemName=Components.[QB Component Name]) As x
我想你想重新构造你的查询。进行三个单独的连接,每个零件一个。然后,对每个零件类型按项进行计数——一列用于组装,一列用于服务,一列用于组件 您将获得一个结果集,其中包含每个类型的名称和出现次数。那你想怎么做就怎么做
我在移动设备上,因此无法键入SQL。我想您需要重新构造查询。进行三个单独的连接,每个零件一个。然后,对每个零件类型按项进行计数——一列用于组装,一列用于服务,一列用于组件 您将获得一个结果集,其中包含每个类型的名称和出现次数。那你想怎么做就怎么做 我在移动设备上,因此无法键入SQL