对于 500,000 个节点,我需要 10-15 秒,知道如何优化它吗?
start n=node(*) WHERE HAS(n.score) RETURN n, n.score ORDER BY n.score DESC 限制 5;
环顾四周,我感觉到 WHERE 子句正在减慢它的速度,但我不确定如何在节点的属性上使用 MATCH。
正如 Luanne 所说,这需要时间,因为您正在搜索图表的所有节点。您只能在具有 score 属性的节点中搜索(通过索引它们,通过从公共节点搜索它们,或者 - 如果您使用的是 Neo4j 2 - 通过标记它们)
有关索引的进一步解释,请参阅http://docs.neo4j.org/chunked/milestone/indexing.html(这似乎是更常见的解决方案)。
使用 node(*),您可以有效地触摸 500,000 个节点的整个图表,以检查属性的存在,并对结果进行排序。你得到多少行?如果你放弃你的订单条款,它会更快吗?
你的用例是什么?想知道您是否可以对此进行不同的建模以避免全局图形操作。例如,使用 score 属性索引节点,或者创建从所有具有 score 属性的节点到某种参考节点的关系。真的取决于你的用例