Sql 访问查询速度不同

Sql 访问查询速度不同,sql,performance,ms-access,Sql,Performance,Ms Access,我有一个本地access数据库,其中有一个查询,它从表单中获取值以填充下拉菜单。(对我来说)奇怪的是,对于大多数选项,这个查询很快(眨眼),但对于一些选项,它非常慢(>10秒)。 该查询的作用如下:它填充一个下拉菜单来记录在特定目击中看到的动物,但仅记录在该特定目击中尚未记录的动物(以避免重复输入) 对于4个可能物种中的2个,它在所有组中表现良好;对于1个物种,它在5个组中的4个组中表现良好,但对于最后一个组,它在两个组中表现非常缓慢。有人知道这种行为的原因吗?查询有问题吗?或者表中的重复条目会

我有一个本地access数据库,其中有一个查询,它从表单中获取值以填充下拉菜单。(对我来说)奇怪的是,对于大多数选项,这个查询很快(眨眼),但对于一些选项,它非常慢(>10秒)。 该查询的作用如下:它填充一个下拉菜单来记录在特定目击中看到的动物,但仅记录在该特定目击中尚未记录的动物(以避免重复输入)


对于4个可能物种中的2个,它在所有组中表现良好;对于1个物种,它在5个组中的4个组中表现良好,但对于最后一个组,它在两个组中表现非常缓慢。有人知道这种行为的原因吗?查询有问题吗?或者表中的重复条目会导致这种情况?我不认为表中有重复项,我已经检查过了,有一些重复项,但它们同时出现在有问题和没有问题的组中。我可以重新编写查询以使其执行得更快吗?

正如我们在上面的评论中所指出的,您确认了额外的连接并不是真正需要的,事实上,它将把结果限制在已经看到的动物身上。这些加入也可能导致经济放缓

我知道Access可能会自动添加大部分括号,但我已经删除了它们,并将子查询转换为可读性更好的
not exists
表单

SELECT tblAnimals.AnimalID, tblAnimals.Nickname, tblAnimals.Species
FROM tblAnimals
WHERE
        tblAnimals.Species = [form]![Species]
    AND tblAnimals.CurrentGroup = [form]![AnimalGroup2]
    AND tblAnimals.[Dead?] = False
    AND NOT EXISTS (
        SELECT tblAnimalsatSighting.AnimalID
        FROM tblAnimalsatSighting
        WHERE
                tblAnimals.AnimalID = tblAnimalsatSighting.AnimalID
            AND tblAnimalsatSighting.SightingID = [form]![SightingID]
    );

我不明白你为什么要做连接。看起来所有的过滤都与动物物种和组有关,然后子查询检查是否有目击。事实上,我认为每种动物都需要事先在某个地方看到它才能出现在名单上,你可能不想看到。所以只要从tblSightings WHERE…我的意思是从tblAnimals WHERE…它确实做了你怀疑的事情(它需要之前的目击),事实上我不想这样。你的建议很管用,我想我让生活变得更困难了!谢谢
SELECT tblAnimals.AnimalID, tblAnimals.Nickname, tblAnimals.Species
FROM tblAnimals
WHERE
        tblAnimals.Species = [form]![Species]
    AND tblAnimals.CurrentGroup = [form]![AnimalGroup2]
    AND tblAnimals.[Dead?] = False
    AND NOT EXISTS (
        SELECT tblAnimalsatSighting.AnimalID
        FROM tblAnimalsatSighting
        WHERE
                tblAnimals.AnimalID = tblAnimalsatSighting.AnimalID
            AND tblAnimalsatSighting.SightingID = [form]![SightingID]
    );