我使用特定的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个元素。
知道如何加快这个要求吗?我确信有一种方法可以使用其他语法来执行此搜索。
答案 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