gpt4 book ai didi

Arangodb AQL 过滤器不在集合中,非常慢

转载 作者:行者123 更新时间:2023-12-02 19:56:47 24 4
gpt4 key购买 nike

我想找到一组没有个人资料的用户。

ArangoDB 2.4.3

LENGTH(users) -> 130k
LENGTH(profiles) -> 110k

users.userId -> unique hash index
profiles.userId -> unique hash index

我制作的这个 AQL 片段比仲夏穿越大峡谷的蜗牛还要慢。

LET usersWithProfiles = ( /* This part is ok */
FOR i IN users
FOR j IN profiles
FILTER i.userId == j.userId
RETURN i
)

LET usersWithoutProfiles = ( /* This is not */
FOR i IN usersWithProfiles
FILTER i NOT IN users
RETURN i
)

RETURN LENGTH(usersWithoutProfiles)

我很确定有一种完全理智的方法可以正确地做到这一点,但我错过了。有什么想法吗?

编辑 1(@dothebart 回复后):

这是新的查询,但仍然很慢

LET userIds_usersWithProfile = (
FOR i IN users
FOR j IN profile
FILTER i.userId == j.userId
RETURN i.userId
)

LET usersWithoutProfiles = (
FOR i IN users
FILTER i.userId NOT IN userIds_usersWithProfile
RETURN i
)

RETURN LENGTH(usersWithoutProfiles)

最佳答案

另请注意,原始查询的这一部分非常昂贵:

LET usersWithoutProfiles = (
FOR i IN usersWithProfiles
FILTER i NOT IN users
RETURN i
)

原因是 FILTER 使用 users,此时它是一个表达式,它将集合中的所有文档构建为数组。我建议不要使用此查询,而是使用此查询,它将返回没有关联个人资料记录的用户的 _key 属性:

FOR user IN users 
LET profile = (
FOR profile IN profiles
FILTER profile.userId == user.userId
RETURN 1
)
FILTER LENGTH(profile) == 0
RETURN user._key

关于Arangodb AQL 过滤器不在集合中,非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28437725/

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