在将neo4j图形数据库与cypher查询语言一起使用时,我发现在查询结尾添加“LIMIT {number}”时,一些计算成本高昂的查询运行得更快。我还遇到了一些其他查询,即使添加限制1,它也会永远运行。 (这发生在我执行可变路径长度查询)时 如规范中所述,LIMIT约束输出中的行数。在那种情况下,我的理解是查询是这样完成的,只输出一些行。在这种情况下,所有计算上昂贵的查询都不应受限制。 LIMIT究竟如何在neo4j cypher查询中工作?
答案 0 :(得分:1)
首先,值得一提的是,Cypher是一种描述性语言,这意味着你说出你想要的东西,而不是如何得到它。这意味着在简单的MATCH (d:Cat)-[o:OWNS]->(g:Person)
中,Cypher可以自由地开始搜索d,o或g,然后根据需要展开/过滤以查找所有匹配项。这意味着Cypher如何运行并不能保证,只是它产生的结果。 Cyphers的性能也将基于您正在运行它的解释器版本(因为它可能决定做更聪明/更笨的事情)。
如果您有LIMIT关键字,但必须计算一切以获取准确的限制,LIMIT关键字只能通过限制未来匹配中的行来提供帮助。如果你只需要“前5只猫”MATCH (n:Cat) RETURN n LIMIT 5
,那么一旦Cypher匹配了5只猫,它就会知道它会抛出更多的东西,所以它可以在5场比赛后停止而不是匹配所有的猫并且服用5只。你做MATCH (n:Cat) RETURN n ORDER BY n.name DESC LIMIT 5
,因为匹配5取决于排序,Cypher别无选择,只能加载所有猫,对它们进行排序,然后限制为前5个。