微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NEO4J - 可选查询非常慢

如何解决NEO4J - 可选查询非常慢

我是 Neo4J 的新手,我有以下查询,如何使其更快?确实需要很长时间

future

Explain model

解决方法

您获得了所有这些可选信息(应用程序、排名、注释、评论者),这有点奇怪,但您并没有对它做任何事情。你不会返回任何这些,你只会返回来自年份的信息。

如果你不打算使用它,就不要匹配它。

但如果您的目的是确保每个模式至少存在一个这样的路径,请对这些使用 WHERE 子句,如果某些可选匹配存在多个路径,这也将避免交叉产品问题。

但由于您使用的是 OPTIONAL MATCH,您似乎不希望它们在图表中的存在与否来控制是否返回年份。因此,它们没有任何用途,只会使您的查询变慢。您似乎唯一的硬性要求是 :Vintage 是由 :Wine 制成的(尽管如果所有 :Vintage 都是由 :Wine 制成的,您也可以删除该部分)。我们会保留它并移除其他的。

此外,您对总年份的计算也不正确。由于您使用的是 OPTIONAL MATCHes,因此您不关心年份是否符合那里的模式,因此我们可以在匹配单个节点之前将年份合计。

最后,不清楚您只是在寻找节点的子集,因此我们可以取消列表切片方法并使用 SKIP 和 LIMIT 代替。这也可能是您的查询花费这么长时间的原因……它正在计算所有老式信息,但您在最后只取了一部分,因此您正在做很多工作,而这些工作只是在结束。

试试这个:

MATCH (vintage:Vintage)
WHERE (vintage)-[:MADE_FROM]->(:Wine)
WITH count(vintage) as total

MATCH (vintage:Vintage)
WHERE (vintage)-[:MADE_FROM]->(:Wine)
WITH total,vintage
ORDER BY vintage.code ASC,vintage.year DESC
SKIP 0
LIMIT 10
WITH total,collect({ uid: vintage.uid,year: vintage.year,cv: vintage.referencePrice}) as vintages
RETURN { vintages:vintages,total:total} as vintage

如果这些 OPTIONAL MATCH 是有目的的,请在评论中解释,我会看看如何修改查询来处理它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。