Neo4j Python驱动能否运行EXPLAIN?如何获取查询返回的非数据信息?
关于Neo4j Python驱动获取EXPLAIN输出及执行元信息的解答
1. EXPLAIN功能是否仅支持交互使用?
EXPLAIN不是仅支持交互使用的功能,完全可以通过Python驱动获取其输出。操作逻辑是直接提交带EXPLAIN前缀的Cypher查询,无需获取返回的记录数据,调取查询对应的ResultSummary对象即可拿到执行计划的全部内容。
2. 如何通过编程方式获取非数据类执行信息?
所有非数据类的执行提示、耗时、记录数等信息都封装在ResultSummary对象中,执行查询后调用.consume()方法即可获取该对象,参考示例代码如下:
from neo4j import GraphDatabase # 初始化驱动 uri = "bolt://localhost:7687" driver = GraphDatabase.driver(uri, auth=("neo4j", "你的数据库密码")) def get_query_metadata(cypher, parameters=None): with driver.session() as session: result = session.run(cypher, parameters or {}) # 所有非数据类信息全部封装在该summary对象中 summary = result.consume() return summary # 示例1:获取普通查询的执行提示信息 normal_summary = get_query_metadata("MATCH (n) RETURN n LIMIT 25") # 你提到的执行提示类内容可以直接通过对应字段拼接得到 print(f"Started streaming {normal_summary.counters.nodes_returned} records after {normal_summary.result_available_after} ms and completed after {normal_summary.result_consumed_after} ms.") # 示例2:获取EXPLAIN的执行计划内容 explain_summary = get_query_metadata("EXPLAIN MATCH (n) RETURN n LIMIT 25") if explain_summary.plan: # 执行计划的根算子信息 print("根算子类型:", explain_summary.plan.operation_type) print("算子参数:", explain_summary.plan.args) # 递归遍历plan.children属性即可拿到完整的执行计划树
3. ResultSummary的profile字段赋值逻辑
profile字段默认值为None,仅当你提交的Cypher查询带PROFILE前缀时,该字段才会被赋值,存储查询执行的剖面统计信息(包括每个算子的实际执行行数、耗时、缓存命中情况等);如果提交的是普通查询或者EXPLAIN前缀的查询,该字段都会保持None。
注意:
EXPLAIN对应的执行计划信息存储在summary.plan属性中,不要和profile属性混淆。
版本适配说明
你使用的neo4j community 4.3.2、neo4j python driver 4.3.4完全支持上述所有功能,不存在版本兼容性问题。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

