Neo4j查询性能问题

时间:2015-05-25 13:57:28

标签: performance neo4j cypher

我使用特定的Cypher Command会遇到一些性能问题。

我查找的R节点没有直接连接到I类型的特定节点集(这里,索引字段为“79”和“4”的节点),我想最大化字段“得分”:

MATCH (r:R), (i0:I { index:"79" }), (i1:I { index:"4" })
WHERE NOT r--i0 AND NOT r--i1
RETURN r.index
ORDER BY r.score DESC
LIMIT 5

查询通常在1250ms内执行。 如果我删除ORDER BY子句,请求时间将减少到130毫秒。 order子句迭代了近3300个元素。

知道如何加快这个要求吗?我确信有一种方法可以使用其他语法来执行此搜索。

2 个答案:

答案 0 :(得分:3)

我认为这是正常的,通过删除 ORDER BY ,他将返回他可以匹配的5个第一个节点。 通过添加ORDER BY,它强制加载所有可能的匹配节点,具体取决于“R”节点的数量,时间将增加。

现在:

您是否使用 PROFILE

“分析”了您的查询

你对I:index?

有索引/约束吗?

您可以稍微将查询更改为:

MATCH (r:R), (i0:I { index:"79" }), (i1:I { index:"4" })
WHERE NOT EXISTS((r)--(i0)) 
AND NOT EXISTS((r)--(i1))
RETURN r.index
ORDER BY r.score DESC
LIMIT 5

答案 1 :(得分:2)

您使用的是哪个版本?尝试更新到最新版本,也请通过在查询前添加“PROFILE”来分享您的可视化查询计划

将其更改为:

MATCH (i0:I { index:"79" }), (i1:I { index:"4" })
MATCH (r:R) 
WHERE NOT r--i0 AND NOT r--i1
WITH r
ORDER BY r.score DESC
LIMIT 5
RETURN r.index