我看到了一个主题(理解Neo4j Cypher的Profile关键字和执行计划),提到了profile关键字。
我在Neo4j 2.0.0RC1 Community中无法使用它。
Peter写道它没有完全实现。
它会被支持吗?
我的意思是,随着我们调整查询,观察计划变化可能是有趣的...
我看到了一个主题(理解Neo4j Cypher的Profile关键字和执行计划),提到了profile关键字。
我在Neo4j 2.0.0RC1 Community中无法使用它。
Peter写道它没有完全实现。
它会被支持吗?
我的意思是,随着我们调整查询,观察计划变化可能是有趣的...
你仍然可以找到neo4j shell,在那里你可以运行profile
命令。
无论是通过启动bin/neo4j-shell
连接到正在运行的服务器,还是通过在左侧的“(i)”信息菜单中切换到旧的Web UI,并选择底部链接“webadmin” -> http://localhost:7474/webadmin
。
当浏览器更易于阅读和理解时,性能分析信息将稍后添加到其中。
从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
另外,你现在可以在不实际执行查询的情况下检查查询计划,例如验证会更改数据库的查询。只需在查询前面添加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
一个相关的新特性是新的“基于成本”的查询计划器,以及强制使用任何特定查询的“基于成本”或“基于规则”的查询计划器的能力。文档注意到,并非所有查询都可以通过“基于成本”的查询计划器解决,这种情况下将忽略该设置并使用“基于规则”的计划器。请参阅 15.1 如何执行查询?
要强制对所有查询使用任一查询计划器,请在conf/neo4j.properties
(Neo4j服务器)中设置query.planner.version
配置设置,或通过调用您的GraphDatabaseService
对象上的.setConfig()
方法(Neo4j嵌入式)。将其设置为COST
或RULE
,要将使用哪个查询计划器的决策返回给Neo4j,请将其设置为default
(或完全删除该设置)。请参阅 24.5 配置设置,使用配置设置启动嵌入式数据库。
要针对特定查询强制使用查询计划器,请在查询前加上CYPHER planner=cost
或CYPHER planner=rule
。请参阅 15.1 如何执行查询?
CYPHER planner=cost
MATCH (n:Peter {foo: 'Paul'})
RETURN n.bar, ID(n)
使用任一查询规划器,您可以对查询进行PROFILE
或EXPLAIN
,并查看它们实现查询的任何差异。
如需要解释执行计划,请参阅文档中相关章节:16. Execution Plans。