分析查询性能 (Profile)
对查询进行分析并检查其执行计划有助于定位潜在瓶颈或提升性能。欲了解更多信息,请参阅 Cypher → 执行计划与查询调优。
The EXPLAIN 关键字
如果在查询前加上 EXPLAIN,服务器会返回它将用于运行该查询的执行计划,但不会实际执行。该计划作为 Cypher 操作符 的嵌套对象出现,键名为 queryPlan。
请求示例
POST https://:7474/db/neo4j/query/v2
Authorization: Basic bmVvNGo6dmVyeXNlY3JldA==
Content-Type: application/json
{
"statement": "EXPLAIN MATCH (n:Person {name: $name}) RETURN n.name",
"parameters": {
"name": "Alice"
}
}
示例响应
202: OK
Content-Type: application/json
{
"data": {
"fields": [
"n.name"
],
"values": []
},
"queryPlan": {
"operatorType": "ProduceResults@neo4j",
"arguments": {
"planner-impl": "IDP",
"string-representation": "Cypher 5\n\nPlanner COST\n\nRuntime PIPELINED\n\nRuntime version 2025.10\n\nBatch size 128\n\n+------------------+----+---------------------------+----------------+---------------------+\n| Operator | Id | Details | Estimated Rows | Pipeline |\n+------------------+----+---------------------------+----------------+---------------------+\n| +ProduceResults | 0 | `n.name` | 1 | |\n| | +----+---------------------------+----------------+ |\n| +Projection | 1 | cache[n.name] AS `n.name` | 1 | |\n| | +----+---------------------------+----------------+ |\n| +Filter | 2 | cache[n.name] = $name | 1 | |\n| | +----+---------------------------+----------------+ |\n| +NodeByLabelScan | 3 | n:Person | 10 | Fused in Pipeline 0 |\n+------------------+----+---------------------------+----------------+---------------------+\n\nTotal database accesses: ?\n",
"runtime": "PIPELINED",
"runtime-impl": "PIPELINED",
"version": "5",
"batch-size": 128,
"Details": "`n.name`",
"planner-version": "2025.10",
"PipelineInfo": "Fused in Pipeline 0",
"runtime-version": "2025.10",
"Id": 0,
"EstimatedRows": 0.5,
"planner": "COST"
},
"identifiers": [
"n",
"`n.name`"
],
"children": [
{
"operatorType": "Projection@neo4j",
"arguments": {
"Details": "cache[n.name] AS `n.name`",
"Id": 1,
"EstimatedRows": 0.5,
"PipelineInfo": "Fused in Pipeline 0"
},
"identifiers": [
"n",
"`n.name`"
],
"children": [
{
"operatorType": "Filter@neo4j",
"arguments": {
"Details": "cache[n.name] = $name",
"Id": 2,
"EstimatedRows": 0.5,
"PipelineInfo": "Fused in Pipeline 0"
},
"identifiers": [
"n"
],
"children": [
{
"operatorType": "NodeByLabelScan@neo4j",
"arguments": {
"Details": "n:Person",
"Id": 3,
"EstimatedRows": 10.0,
"PipelineInfo": "Fused in Pipeline 0"
},
"identifiers": [
"n"
],
"children": []
}
]
}
]
}
]
},
"bookmarks": [
"FB:kcwQC685m8YsRuyUSvMWiiQriwKQ"
]
}
The PROFILE 关键字
如果在查询前加上 PROFILE,服务器会返回执行计划 以及 相应的查询结果。该计划作为 Cypher 操作符 的嵌套对象出现,键名为 profiledQueryPlan。
请求示例
POST https://:7474/db/neo4j/query/v2
Authorization: Basic bmVvNGo6dmVyeXNlY3JldA==
Content-Type: application/json
{
"statement": "PROFILE MATCH (n:Person {name: $name}) RETURN n.name",
"parameters": {
"name": "Alice"
}
}
示例响应
202: OK
Content-Type: application/json
{
"data": {
"fields": [
"n.name"
],
"values": [
[
"Alice"
]
]
},
"profiledQueryPlan": {
"dbHits": 0,
"records": 1,
"hasPageCacheStats": false,
"pageCacheHits": 0,
"pageCacheMisses": 0,
"pageCacheHitRatio": 0.0,
"time": 0,
"operatorType": "ProduceResults@neo4j",
"arguments": {
"GlobalMemory": 312,
"planner-impl": "IDP",
"Memory": 0,
"string-representation": "Planner COST\n\nRuntime PIPELINED\n\nRuntime version 5.18\n\nBatch size 128\n\n+------------------+----+---------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+\n| Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline |\n+------------------+----+---------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+\n| +ProduceResults | 0 | `n.name` | 1 | 1 | 0 | 0 | | | |\n| | +----+---------------------------+----------------+------+---------+----------------+ | | |\n| +Projection | 1 | cache[n.name] AS `n.name` | 1 | 1 | 0 | | | | |\n| | +----+---------------------------+----------------+------+---------+----------------+ | | |\n| +Filter | 2 | cache[n.name] = $name | 1 | 1 | 8 | | | | |\n| | +----+---------------------------+----------------+------+---------+----------------+ | | |\n| +NodeByLabelScan | 3 | n:Person | 10 | 4 | 5 | 248 | 3/0 | 0.453 | Fused in Pipeline 0 |\n+------------------+----+---------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+\n\nTotal database accesses: 13, total allocated memory: 312\n",
"runtime": "PIPELINED",
"runtime-impl": "PIPELINED",
"DbHits": 0,
"batch-size": 128,
"Details": "`n.name`",
"planner-version": "5.18",
"PipelineInfo": "Fused in Pipeline 0",
"runtime-version": "5.18",
"Id": 0,
"EstimatedRows": 0.5,
"planner": "COST",
"Rows": 1
},
"identifiers": [
"n",
"`n.name`"
],
"children": [
{
"dbHits": 0,
"records": 1,
"hasPageCacheStats": false,
"pageCacheHits": 0,
"pageCacheMisses": 0,
"pageCacheHitRatio": 0.0,
"time": 0,
"operatorType": "Projection@neo4j",
"arguments": {
"Details": "cache[n.name] AS `n.name`",
"PipelineInfo": "Fused in Pipeline 0",
"Id": 1,
"EstimatedRows": 0.5,
"DbHits": 0,
"Rows": 1
},
"identifiers": [
"n",
"`n.name`"
],
"children": [
{
"dbHits": 8,
"records": 1,
"hasPageCacheStats": false,
"pageCacheHits": 0,
"pageCacheMisses": 0,
"pageCacheHitRatio": 0.0,
"time": 0,
"operatorType": "Filter@neo4j",
"arguments": {
"Details": "cache[n.name] = $name",
"PipelineInfo": "Fused in Pipeline 0",
"Id": 2,
"EstimatedRows": 0.5,
"DbHits": 8,
"Rows": 1
},
"identifiers": [
"n"
],
"children": [
{
"dbHits": 5,
"records": 4,
"hasPageCacheStats": true,
"pageCacheHits": 3,
"pageCacheMisses": 0,
"pageCacheHitRatio": 1.0,
"time": 453072,
"operatorType": "NodeByLabelScan@neo4j",
"arguments": {
"Details": "n:Person",
"PipelineInfo": "Fused in Pipeline 0",
"Memory": 248,
"Time": 453072,
"Id": 3,
"EstimatedRows": 10.0,
"PageCacheMisses": 0,
"DbHits": 5,
"Rows": 4,
"PageCacheHits": 3
},
"identifiers": [
"n"
],
"children": []
}
]
}
]
}
]
},
"bookmarks": [
"FB:kcwQ/wTfJf8rS1WY+GiIKXsCXgyQ"
]
}