【发布时间】:2013-12-17 07:48:32
【问题描述】:
我看到一个主题 (Understanding Neo4j Cypher Profile keyword and execution plan) 提到了 profile 关键字。
我无法在 Neo4j 2.0.0RC1 社区中使用它。
Peter 写道,它还没有完全实现。
会得到支持吗?
我的意思是,在我们调整查询时观察计划的变化可能会很有趣...
【问题讨论】:
我看到一个主题 (Understanding Neo4j Cypher Profile keyword and execution plan) 提到了 profile 关键字。
我无法在 Neo4j 2.0.0RC1 社区中使用它。
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 命令和密码查询来执行查询并查看执行计划的可视化。
PROFILE
MATCH (n:Peter {foo: 'Paul'})
RETURN n.bar, ID(n)
-------------
n.bar ID(n)
Mary 951
此外,您现在无需实际执行即可检查查询计划,例如验证会更改数据库的查询。使用查询前的EXPLAIN 命令执行此操作。请参阅文档中的15.2 How do I profile a query?。
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 How are queries executed?
要对所有查询强制使用任一查询计划程序,请在 conf/neo4j.properties(Neo4j 服务器)中设置 query.planner.version 配置设置,或在您的 GraphDatabaseService 对象(嵌入 Neo4j)上调用 .setConfig() 方法。将其设置为COST 或RULE,并将决定使用哪个查询计划器返回给Neo4j,将其设置为default(或完全删除该设置)。见24.5 Configuration Settings、Starting an embedded database with configuration settings。
要对特定查询强制使用任一查询计划程序,请在查询前添加CYPHER planner=cost 或CYPHER planner=rule。见15.1 How are queries executed?
CYPHER planner=cost
MATCH (n:Peter {foo: 'Paul'})
RETURN n.bar, ID(n)
您可以使用任一查询计划器进行PROFILE 或EXPLAIN 查询,并查看它们在实现您的查询方面的任何差异。
有关解释执行计划的帮助,请参阅文档的相关章节,16. Execution Plans。
【讨论】: