有没有一种方法可以显示Cypher执行计划?

16

我看到了一个主题(理解Neo4j Cypher的Profile关键字和执行计划),提到了profile关键字。

我在Neo4j 2.0.0RC1 Community中无法使用它。

Peter写道它没有完全实现。

它会被支持吗?

我的意思是,随着我们调整查询,观察计划变化可能是有趣的...

2个回答

20

你仍然可以找到neo4j shell,在那里你可以运行profile命令。

无论是通过启动bin/neo4j-shell连接到正在运行的服务器,还是通过在左侧的“(i)”信息菜单中切换到旧的Web UI,并选择底部链接“webadmin” -> http://localhost:7474/webadmin

当浏览器更易于阅读和理解时,性能分析信息将稍后添加到其中。


现在的情况怎么样?请告诉我,个人资料功能是否已经完成了? - Gilgamesz

18

从Neo4j 2.2开始,提供了额外的性能分析工具。一些仅通过neo4j-shell或REST端点可用的功能现在也可以在Neo4j浏览器中使用,并且还有一些新功能。

现在,您可以直接在Neo4j浏览器repl中使用PROFILE命令来执行cypher查询并查看执行计划的可视化。

PROFILE
MATCH (n:Peter {foo: 'Paul'})
RETURN n.bar, ID(n)

-------------
n.bar   ID(n)
Mary    951

Cypher 2.2 profile

另外,你现在可以在不实际执行查询的情况下检查查询计划,例如验证会更改数据库的查询。只需在查询前面添加EXPLAIN命令即可进行此操作。请参见文档中的15.2 如何对查询进行性能分析?

EXPLAIN
MATCH (n:Peter {foo: 'Paul'})
SET n.foo = 'Mary', n.bar = 'Paul'
RETURN n.foo, ID(n)

------------------------------------------
// Nothing returned, query is not executed

Cypher 2.2 explain

一个相关的新特性是新的“基于成本”的查询计划器,以及强制使用任何特定查询的“基于成本”或“基于规则”的查询计划器的能力。文档注意到,并非所有查询都可以通过“基于成本”的查询计划器解决,这种情况下将忽略该设置并使用“基于规则”的计划器。请参阅 15.1 如何执行查询?

要强制对所有查询使用任一查询计划器,请在conf/neo4j.properties(Neo4j服务器)中设置query.planner.version配置设置,或通过调用您的GraphDatabaseService对象上的.setConfig()方法(Neo4j嵌入式)。将其设置为COSTRULE,要将使用哪个查询计划器的决策返回给Neo4j,请将其设置为default(或完全删除该设置)。请参阅 24.5 配置设置使用配置设置启动嵌入式数据库

要针对特定查询强制使用查询计划器,请在查询前加上CYPHER planner=costCYPHER planner=rule。请参阅 15.1 如何执行查询?

CYPHER planner=cost
MATCH (n:Peter {foo: 'Paul'})
RETURN n.bar, ID(n)

使用任一查询规划器,您可以对查询进行PROFILEEXPLAIN,并查看它们实现查询的任何差异。

如需要解释执行计划,请参阅文档中相关章节:16. Execution Plans


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接