在neo4j中使用cypher查询语言,限制功能如何

时间:2017-05-18 12:24:50

标签: graph neo4j cypher database nosql

在将neo4j图形数据库与cypher查询语言一起使用时,我发现在查询结尾添加“LIMIT {number}”时,一些计算成本高昂的查询运行得更快。我还遇到了一些其他查询,即使添加限制1,它也会永远运行。 (这发生在我执行可变路径长度查询)时 如规范中所述,LIMIT约束输出中的行数。在那种情况下,我的理解是查询是这样完成的,只输出一些行。在这种情况下,所有计算上昂贵的查询都不应受限制。 LIMIT究竟如何在neo4j cypher查询中工作?

1 个答案:

答案 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个。