运算符详解
此页面包含 Cypher® 中所有可用运算符的详细信息和示例查询。这些运算符按其特性的相似性分组。
某些运算符仅由 Cypher 可以从中选择的 运行时 的子集使用。如果是这种情况,示例查询将以选择其中一个运行时的选项为前缀。
所有节点扫描
AllNodesScan
运算符从节点存储中读取所有节点。包含节点的变量在参数中显示。任何使用此运算符的查询都可能在非平凡的数据库上遇到性能问题。
PROFILE
MATCH (n)
RETURN n
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+---------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+---------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | n | 35 | 35 | 0 | | | | | | | +---------+----------------+------+---------+----------------+ | | | | +AllNodesScan | n | 35 | 35 | 36 | 120 | 3/0 | 0.354 | Fused in Pipeline 0 | +-----------------+---------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 36, total allocated memory: 184
分区所有节点扫描
PartitionedAllNodesScan
是 AllNodesScan
运算符的变体,由 并行运行时 使用。它允许将存储分区成不同的段,每个段可以并行独立扫描。
CYPHER runtime=parallel
PROFILE
MATCH (n)
RETURN n
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +--------------------------+----+---------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------------+----+---------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | n | 35 | 35 | 71 | 2/0 | 6.470 | In Pipeline 1 | | | +----+---------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedAllNodesScan | 1 | n | 35 | 35 | 35 | 3/0 | 1.491 | In Pipeline 0 | +--------------------------+----+---------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 106
定向关系索引扫描
DirectedRelationshipIndexScan
运算符检查索引中存储的所有值,返回具有特定关系类型和指定属性的所有关系及其起始节点和结束节点。
PROFILE
MATCH ()-[r: WORKS_IN]->()
WHERE r.title IS NOT NULL
RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +--------------------------------+----------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------------------+----------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 15 | 15 | 0 | | | | | | | +----------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +DirectedRelationshipIndexScan | RANGE INDEX (anon_0)-[r:WORKS_IN(title)]->(anon_1) WHERE title IS NOT NULL | 15 | 15 | 16 | 120 | 3/1 | 2.464 | Fused in Pipeline 0 | +--------------------------------+----------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 16, total allocated memory: 184
分区定向关系索引扫描
PartitionedDirectedRelationshipIndexScan
是 DirectedRelationshipIndexScan
运算符的变体,由 并行运行时 使用。它允许将索引分区成不同的段,每个段可以并行独立扫描。
CYPHER runtime=parallel
PROFILE
MATCH ()-[r: WORKS_IN]->()
WHERE r.title IS NOT NULL
RETURN r
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +-------------------------------------------+----+----------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------------------------------+----+----------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | r | 15 | 15 | 70 | 1/0 | 2.865 | In Pipeline 1 | | | +----+----------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedDirectedRelationshipIndexScan | 1 | RANGE INDEX (anon_0)-[r:WORKS_IN(title)]->(anon_1) WHERE title IS NOT NULL | 15 | 15 | 16 | 2/0 | 0.527 | In Pipeline 0 | +-------------------------------------------+----+----------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 86
非定向关系索引扫描
UndirectedRelationshipIndexScan
运算符检查索引中存储的所有值,返回具有特定关系类型和指定属性的所有关系及其起始节点和结束节点。
PROFILE
MATCH ()-[r: WORKS_IN]-()
WHERE r.title IS NOT NULL
RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +----------------------------------+---------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------------------+---------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 30 | 30 | 0 | | | | | | | +---------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +UndirectedRelationshipIndexScan | RANGE INDEX (anon_0)-[r:WORKS_IN(title)]-(anon_1) WHERE title IS NOT NULL | 30 | 30 | 16 | 120 | 3/1 | 1.266 | Fused in Pipeline 0 | +----------------------------------+---------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 16, total allocated memory: 184
分区非定向关系索引扫描
PartitionedUndirectedRelationshipIndexScan
是 UndirectedRelationshipIndexScan
运算符的变体,由 并行运行时 使用。它允许将索引分区成不同的段,每个段可以并行独立扫描。
CYPHER runtime=parallel
PROFILE
MATCH ()-[r: WORKS_IN]-()
WHERE r.title IS NOT NULL
RETURN r
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +---------------------------------------------+----+---------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------------------------+----+---------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | r | 30 | 30 | 140 | 1/0 | 3.088 | In Pipeline 1 | | | +----+---------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedUndirectedRelationshipIndexScan | 1 | RANGE INDEX (anon_0)-[r:WORKS_IN(title)]-(anon_1) WHERE title IS NOT NULL | 30 | 30 | 16 | 2/0 | 0.572 | In Pipeline 0 | +---------------------------------------------+----+---------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 156
定向关系索引查找
DirectedRelationshipIndexSeek
运算符使用索引查找来查找关系及其起始节点和结束节点。关系变量和使用的索引在运算符的参数中显示。
PROFILE
MATCH (candidate)-[r:WORKS_IN]->()
WHERE r.title = 'chief architect'
RETURN candidate
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +--------------------------------+-----------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------------------+-----------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | candidate | 2 | 1 | 0 | | | | | | | +-----------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +DirectedRelationshipIndexSeek | RANGE INDEX (candidate)-[r:WORKS_IN(title)]->(anon_0) WHERE title = $autostring_0 | 2 | 1 | 2 | 120 | 3/1 | 0.591 | Fused in Pipeline 0 | +--------------------------------+-----------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 2, total allocated memory: 184
分区定向关系索引查找
PartitionedDirectedRelationshipIndexSeek
是 DirectedRelationshipIndexSeek
运算符的变体,由 并行运行时 使用。它允许将索引分区成不同的段,每个段可以并行独立扫描。
CYPHER runtime=parallel
PROFILE
MATCH (candidate)-[r:WORKS_IN]->()
WHERE r.title = 'chief architect'
RETURN candidate
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +-------------------------------------------+----+-----------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------------------------------+----+-----------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | candidate | 2 | 1 | 2 | 2/0 | 0.284 | In Pipeline 1 | | | +----+-----------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedDirectedRelationshipIndexSeek | 1 | RANGE INDEX (candidate)-[r:WORKS_IN(title)]->(anon_0) WHERE title = $autostring_0 | 2 | 1 | 2 | 2/0 | 0.148 | In Pipeline 0 | +-------------------------------------------+----+-----------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 4
非定向关系索引查找
UndirectedRelationshipIndexSeek
运算符使用索引查找来查找关系及其起始节点和结束节点。关系变量和使用的索引在运算符的参数中显示。
PROFILE
MATCH (candidate)-[r:WORKS_IN]-()
WHERE r.title = 'chief architect'
RETURN candidate
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +----------------------------------+----------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------------------+----------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | candidate | 4 | 2 | 0 | | | | | | | +----------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +UndirectedRelationshipIndexSeek | RANGE INDEX (candidate)-[r:WORKS_IN(title)]-(anon_0) WHERE title = $autostring_0 | 4 | 2 | 2 | 120 | 3/1 | 0.791 | Fused in Pipeline 0 | +----------------------------------+----------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 2, total allocated memory: 184
分区非定向关系索引查找
PartitionedUndirectedRelationshipIndexSeek
运算符使用索引查找关系及其起始节点和结束节点。关系变量和使用的索引在运算符的参数中显示。
CYPHER runtime=parallel
PROFILE
MATCH (candidate)-[r:WORKS_IN]-()
WHERE r.title = 'chief architect'
RETURN candidate
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +---------------------------------------------+----+----------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------------------------+----+----------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | candidate | 4 | 2 | 4 | 2/0 | 0.333 | In Pipeline 1 | | | +----+----------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedUndirectedRelationshipIndexSeek | 1 | RANGE INDEX (candidate)-[r:WORKS_IN(title)]-(anon_0) WHERE title = $autostring_0 | 4 | 2 | 2 | 2/0 | 0.151 | In Pipeline 0 | +---------------------------------------------+----+----------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 6
通过元素 ID 查找定向关系
DirectedRelationshipByElementIdSeek
运算符通过元素 ID(使用函数 elementId() 指定)从关系存储中读取一个或多个关系,并生成关系以及关系的源节点和目标节点。
PROFILE
MATCH (n1)-[r]->()
WHERE elementId(r) = 0
RETURN r, n1
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +--------------------------------------+----+----------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------------------------+----+----------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +ProduceResults | 0 | r, n1 | 1 | 0 | 0 | 0 | 0/0 | 0.314 | | | | +----+----------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +DirectedRelationshipByElementIdSeek | 1 | (n1)-[r]->(anon_0) WHERE elementId(r) = $autoint_0 | 1 | 0 | 0 | 248 | 0/0 | 2.337 | In Pipeline 0 | +--------------------------------------+----+----------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ Total database accesses: 0, total allocated memory: 312
通过 ID 查找定向关系
DirectedRelationshipByIdSeek
运算符通过 ID 从关系存储中读取一个或多个关系,并生成关系以及关系的源节点和目标节点。
PROFILE
MATCH (n1)-[r]->()
WHERE id(r) = 0
RETURN r, n1
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------------------+----+---------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------------------+----+---------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | r, n1 | 1 | 1 | 7 | 0 | | | | | | +----+---------------------------------------------+----------------+------+---------+----------------+ | | | | +DirectedRelationshipByIdSeek | 1 | (n1)-[r]->(anon_0) WHERE id(r) = $autoint_0 | 1 | 1 | 1 | 248 | 3/0 | 0.483 | Fused in Pipeline 0 | +-------------------------------+----+---------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 8, total allocated memory: 312
通过元素 ID 查找无向关系
UndirectedRelationshipByElementIdSeek
运算符通过元素 ID(使用函数 elementId() 指定)从关系存储中读取一个或多个关系。由于方向未指定,因此每个关系都会生成两行,这是交替使用起始节点和结束节点的组合的结果。
PROFILE
MATCH (n1)-[r]-()
WHERE elementId(r) = 1
RETURN r, n1
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------------------------+--------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------------------+--------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r, n1 | 2 | 2 | 0 | | | | | | | +--------------------------------------------+----------------+------+---------+----------------+ | | | | +UndirectedRelationshipByElementIdSeek| (n1)-[r]-(anon_0) WHERE elementId(r) = $autoint_0 | 2 | 2 | 1 | 120 | 4/0 | 0.332 | Fused in Pipeline 0 | +---------------------------------+--------------------------------------------+-----+---------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 1, total allocated memory: 184
通过 ID 查找无向关系
UndirectedRelationshipByIdSeek
运算符通过 ID(使用函数 Id() 指定)从关系存储中读取一个或多个关系。由于方向未指定,因此每个关系都会生成两行,这是交替使用起始节点和结束节点的组合的结果。
PROFILE
MATCH (n1)-[r]-()
WHERE id(r) = 1
RETURN r, n1
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------------------+----+--------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------------+----+--------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | r, n1 | 2 | 2 | 14 | 0 | | | | | | +----+--------------------------------------------+----------------+------+---------+----------------+ | | | | +UndirectedRelationshipByIdSeek | 1 | (n1)-[r]-(anon_0) WHERE id(r) = $autoint_0 | 2 | 2 | 1 | 248 | 3/0 | 1.005 | Fused in Pipeline 0 | +---------------------------------+----+--------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 15, total allocated memory: 312
定向关系索引包含扫描
DirectedRelationshipIndexContainsScan
运算符检查索引中存储的所有值,搜索包含特定 STRING
的条目;例如,在包含 CONTAINS
的查询中。虽然这比索引查找慢(因为需要检查所有条目),但它仍然比使用 DirectedRelationshipTypeScan
的类型扫描和属性存储过滤器产生的间接寻址更快。
PROFILE
MATCH ()-[r: WORKS_IN]->()
WHERE r.title CONTAINS 'senior'
RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +----------------------------------------+--------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------------------------+--------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 0 | 4 | 0 | | | | | | | +--------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +DirectedRelationshipIndexContainsScan | TEXT INDEX (anon_0)-[r:WORKS_IN(title)]->(anon_1) WHERE title CONTAINS $autostring_0 | 0 | 4 | 5 | 120 | 3/0 | 1.051 | Fused in Pipeline 0 | +----------------------------------------+--------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 5, total allocated memory: 184
无向关系索引包含扫描
UndirectedRelationshipIndexContainsScan
运算符检查索引中存储的所有值,搜索包含特定 STRING
的条目;例如,在包含 CONTAINS
的查询中。虽然这比索引查找慢(因为需要检查所有条目),但它仍然比使用 DirectedRelationshipTypeScan
的类型扫描和属性存储过滤器产生的间接寻址更快。
PROFILE
MATCH ()-[r: WORKS_IN]-()
WHERE r.title CONTAINS 'senior'
RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------------------------+-------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------------------------+-------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 0 | 8 | 0 | | | | | | | +-------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +UndirectedRelationshipIndexContainsScan | TEXT INDEX (anon_0)-[r:WORKS_IN(title)]-(anon_1) WHERE title CONTAINS $autostring_0 | 0 | 8 | 5 | 120 | 3/0 | 2.684 | Fused in Pipeline 0 | +------------------------------------------+-------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 5, total allocated memory: 184
定向关系索引以…结尾扫描
DirectedRelationshipIndexEndsWithScan
运算符检查索引中存储的所有值,搜索以特定 STRING
结尾的条目;例如,在包含 ENDS WITH
的查询中。虽然这比索引查找慢(因为需要检查所有条目),但它仍然比使用 NodeByLabelScan
的标签扫描和属性存储过滤器产生的间接寻址更快。
PROFILE
MATCH ()-[r: WORKS_IN]->()
WHERE r.title ENDS WITH 'developer'
RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +----------------------------------------+---------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------------------------+---------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 0 | 8 | 0 | | | | | | | +---------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +DirectedRelationshipIndexEndsWithScan | TEXT INDEX (anon_0)-[r:WORKS_IN(title)]->(anon_1) WHERE title ENDS WITH $autostring_0 | 0 | 8 | 9 | 120 | 3/0 | 1.887 | Fused in Pipeline 0 | +----------------------------------------+---------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 9, total allocated memory: 184
无向关系索引以…结尾扫描
UndirectedRelationshipIndexEndsWithScan
运算符检查索引中存储的所有值,搜索以特定 STRING
结尾的条目;例如,在包含 ENDS WITH
的查询中。虽然这比索引查找慢(因为需要检查所有条目),但它仍然比使用 NodeByLabelScan
的标签扫描和属性存储过滤器产生的间接寻址更快。
PROFILE
MATCH ()-[r: WORKS_IN]-()
WHERE r.title ENDS WITH 'developer'
RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------------------------+--------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------------------------+--------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 0 | 16 | 0 | | | | | | | +--------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +UndirectedRelationshipIndexEndsWithScan | TEXT INDEX (anon_0)-[r:WORKS_IN(title)]-(anon_1) WHERE title ENDS WITH $autostring_0 | 0 | 16 | 9 | 120 | 3/0 | 1.465 | Fused in Pipeline 0 | +------------------------------------------+--------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 9, total allocated memory: 184
定向关系索引按范围查找
DirectedRelationshipIndexSeekByRange
运算符使用索引查找关系及其起始节点和结束节点,其中属性的值与给定的前缀 STRING
匹配。DirectedRelationshipIndexSeekByRange
可用于 STARTS WITH
和比较运算符(如 <
、>
、<=
和 >=
)。
PROFILE
MATCH (candidate: Person)-[r:WORKS_IN]->(location)
WHERE r.duration > 100
RETURN candidate
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------------------------+----------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------------------+----------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | candidate | 4 | 15 | 0 | | | | | | | +----------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Filter | candidate:Person | 4 | 15 | 30 | | | | | | | +----------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +DirectedRelationshipIndexSeekByRange | RANGE INDEX (candidate)-[r:WORKS_IN(duration)]->(location) WHERE duration > $autoint_0 | 4 | 15 | 16 | 120 | 4/1 | 0.703 | Fused in Pipeline 0 | +---------------------------------------+----------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 46, total allocated memory: 184
分区定向关系索引按范围查找
PartitionedDirectedRelationshipIndexSeekByRange
是 DirectedRelationshipIndexSeekByRange
运算符的变体,由 并行运行时 使用。它允许将索引划分为不同的段,其中每个段可以独立并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH (candidate: Person)-[r:WORKS_IN]->(location)
WHERE r.duration > 100
RETURN candidate
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +--------------------------------------------------+----+----------------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------------------------------------+----+----------------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | candidate | 4 | 15 | 30 | 1/0 | 1.031 | In Pipeline 1 | | | +----+----------------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | +Filter | 1 | candidate:Person | 4 | 15 | 30 | | | | | | +----+----------------------------------------------------------------------------------------+----------------+------+---------+ | | | | +PartitionedDirectedRelationshipIndexSeekByRange | 2 | RANGE INDEX (candidate)-[r:WORKS_IN(duration)]->(location) WHERE duration > $autoint_0 | 4 | 15 | 16 | 3/0 | 0.203 | Fused in Pipeline 0 | +--------------------------------------------------+----+----------------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ Total database accesses: 76
无向关系索引按范围查找
UndirectedRelationshipIndexSeekByRange
运算符使用索引查找关系及其起始节点和结束节点,其中属性的值与给定的前缀 STRING
匹配。UndirectedRelationshipIndexSeekByRange
可用于 STARTS WITH
和比较运算符(如 <
、>
、<=
和 >=
)。
PROFILE
MATCH (candidate: Person)-[r:WORKS_IN]-(location)
WHERE r.duration > 100
RETURN candidate
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------------------------+---------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------------------------+---------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | candidate | 5 | 15 | 0 | | | | | | | +---------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Filter | candidate:Person | 5 | 15 | 60 | | | | | | | +---------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +UndirectedRelationshipIndexSeekByRange | RANGE INDEX (candidate)-[r:WORKS_IN(duration)]-(location) WHERE duration > $autoint_0 | 8 | 30 | 16 | 120 | 4/1 | 1.214 | Fused in Pipeline 0 | +-----------------------------------------+---------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 76, total allocated memory: 184
分区无向关系索引按范围查找
PartitionedUndirectedRelationshipIndexSeekByRange
是 UndirectedRelationshipIndexSeekByRange
运算符的变体,由 并行运行时 使用。它允许将存储划分为不同的段,其中每个段可以独立并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH (candidate: Person)-[r:WORKS_IN]-(location)
WHERE r.duration > 100
RETURN candidate
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +----------------------------------------------------+----+---------------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------------------------------------+----+---------------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | candidate | 5 | 15 | 30 | 1/0 | 0.918 | In Pipeline 1 | | | +----+---------------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | +Filter | 1 | candidate:Person | 5 | 15 | 60 | | | | | | +----+---------------------------------------------------------------------------------------+----------------+------+---------+ | | | | +PartitionedUndirectedRelationshipIndexSeekByRange | 2 | RANGE INDEX (candidate)-[r:WORKS_IN(duration)]-(location) WHERE duration > $autoint_0 | 8 | 30 | 16 | 3/0 | 0.413 | Fused in Pipeline 0 | +----------------------------------------------------+----+---------------------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ Total database accesses: 106
联合节点按标签扫描
UnionNodeByLabelsScan
运算符从节点标签索引中获取具有至少一个提供标签的所有节点。
PROFILE
MATCH (countryOrLocation:Country|Location)
RETURN countryOrLocation
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------+------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +------------------------+------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ | +ProduceResults | countryOrLocation | 17 | 11 | 0 | | | | | | | | +------------------------------------+----------------+------+---------+----------------+ | | | | | +UnionNodeByLabelsScan | countryOrLocation:Country|Location | 17 | 11 | 13 | 120 | 3/1 | 0.660 | countryOrLocation ASC | Fused in Pipeline 0 | +------------------------+------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ Total database accesses: 13, total allocated memory: 184
分区联合节点按标签扫描
PartitionedUnionNodeByLabelsScan
是 UnionNodeByLabelsScan
运算符的变体,由 并行运行时 使用。它允许将索引划分为不同的段,其中每个段可以独立并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH (countryOrLocation:Country|Location)
RETURN countryOrLocation
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +-----------------------------------+----+------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------------------+----+------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | countryOrLocation | 17 | 11 | 22 | 2/0 | 1.548 | In Pipeline 1 | | | +----+------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedUnionNodeByLabelsScan | 1 | countryOrLocation:Country|Location | 17 | 11 | 13 | 2/0 | 1.976 | In Pipeline 0 | +-----------------------------------+----+------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 35
交集节点按标签扫描
IntersectionNodeByLabelsScan
运算符从节点标签索引中获取具有所有提供标签的所有节点。
PROFILE
MATCH (countryAndLocation:Country&Location)
RETURN countryAndLocation
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------------------+----+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------------------+----+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | countryAndLocation | 10 | 0 | 0 | | | | | | | +----+-------------------------------------+----------------+------+---------+----------------+ | | | | +IntersectionNodeByLabelsScan | 1 | countryAndLocation:Country&Location | 10 | 0 | 0 | 120 | 0/0 | 1.011 | Fused in Pipeline 0 | +-------------------------------+----+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 13, total allocated memory: 184
分区交集节点按标签扫描
PartitionedIntersectionNodeByLabelsScan
是 IntersectionNodeByLabelsScan
运算符的变体,由 并行运行时 使用。它允许将索引划分为不同的段,其中每个段可以独立并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH (countryAndLocation:Country&Location)
RETURN countryAndLocation
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 ------------------------------------------+----+-------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------------------------+----+-------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | countryAndLocation | 3 | 0 | 0 | 0/0 | 0.018 | In Pipeline 1 | | | +----+-------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedIntersectionNodeByLabelsScan | 1 | countryAndLocation:Country&Location | 3 | 0 | 13 | 2/0 | 0.770 | In Pipeline 0 | +------------------------------------------+----+-------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 13
差集节点按标签扫描
SubtractionNodeByLabelsScan
运算符从节点标签索引中获取具有所有第一组提供标签且没有第二组提供标签的所有节点。在下面的示例中,SubtractionNodeByLabelsScan
将检索具有 Location
标签但没有 Country
标签的所有节点。
PROFILE
MATCH (locationNotCountry:Location&!Country)
RETURN locationNotCountry
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------------+----+--------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------------+----+--------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | locationNotCountry | 7 | 10 | 0 | 0 | | | | | | +----+--------------------------------------+----------------+------+---------+----------------+ | | | | +SubtractionNodeByLabelsScan | 1 | locationNotCountry:Location&!Country | 7 | 10 | 13 | 248 | 2/0 | 3.081 | Fused in Pipeline 0 | +------------------------------+----+--------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 13, total allocated memory: 312
分区差集节点按标签扫描
PartitionedSubtractionNodeByLabelsScan
是 SubtractionNodeByLabelsScan
运算符的变体,由 并行运行时 使用。它允许将索引划分为不同的段,其中每个段可以独立并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH (locationNotCountry:Location&!Country)
RETURN locationNotCountry
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +-----------------------------------------+----+--------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------------------------+----+--------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +ProduceResults | 0 | locationNotCountry | 7 | 10 | 0 | 136 | 0/0 | 0.614 | In Pipeline 1 | | | +----+--------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +PartitionedSubtractionNodeByLabelsScan | 1 | locationNotCountry:Location&!Country | 7 | 10 | 13 | 120 | 2/0 | 5.173 | In Pipeline 0 | +-----------------------------------------+----+--------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ Total database accesses: 13, total allocated memory: 262144
定向所有关系扫描
DirectedAllRelationshipsScan
运算符获取数据库中所有关系及其起始节点和结束节点。
PROFILE
MATCH ()-[r]->() RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------------------+------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------------------+------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 28 | 28 | 0 | | | | | | | +------------------------+----------------+------+---------+----------------+ | | | | +DirectedAllRelationshipsScan | (anon_0)-[r]->(anon_1) | 28 | 28 | 28 | 120 | 3/0 | 0.502 | Fused in Pipeline 0 | +-------------------------------+------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 28, total allocated memory: 184
分区定向所有关系扫描
PartitionedDirectedAllRelationshipsScan
是 DirectedAllRelationshipsScan
运算符的变体,由 并行运行时 使用。它允许将存储划分为不同的段,其中每个段可以独立并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH ()-[r]->() RETURN r
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------------------------+----+------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | r | 28 | 28 | 83 | 2/0 | 3.872 | In Pipeline 1 | | | +----+------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedDirectedAllRelationshipsScan | 1 | (anon_0)-[r]->(anon_1) | 28 | 28 | 28 | 3/0 | 1.954 | In Pipeline 0 | +------------------------------------------+----+------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 111
无向所有关系扫描
UndirectedAllRelationshipsScan
运算符获取数据库中所有关系及其起始节点和结束节点。
PROFILE
MATCH ()-[r]-() RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------------------+-----------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------------+-----------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 56 | 56 | 0 | | | | | | | +-----------------------+----------------+------+---------+----------------+ | | | | +UndirectedAllRelationshipsScan | (anon_0)-[r]-(anon_1) | 56 | 56 | 28 | 120 | 3/0 | 1.110 | Fused in Pipeline 0 | +---------------------------------+-----------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 28, total allocated memory: 184
分区无向所有关系扫描
PartitionedUndirectedAllRelationshipsScan
是 UndirectedAllRelationshipsScan
运算符的变体,由 并行运行时 使用。它允许将存储划分为不同的段,其中每个段可以独立并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH ()-[r]-() RETURN r
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +--------------------------------------------+----+-----------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------------------------------+----+-----------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | r | 56 | 56 | 166 | 2/0 | 4.905 | In Pipeline 1 | | | +----+-----------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedUndirectedAllRelationshipsScan | 1 | (anon_0)-[r]-(anon_1) | 56 | 56 | 28 | 9/0 | 1.573 | In Pipeline 0 | +--------------------------------------------+----+-----------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 194
定向关系类型扫描
DirectedRelationshipTypeScan
运算符从关系类型索引中获取具有特定类型的所有关系及其起始节点和结束节点。
PROFILE
MATCH ()-[r: FRIENDS_WITH]->()
RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------------------+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------------------+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 12 | 12 | 0 | | | | | | | +-------------------------------------+----------------+------+---------+----------------+ | | | | +DirectedRelationshipTypeScan | (anon_0)-[r:FRIENDS_WITH]->(anon_1) | 12 | 12 | 13 | 120 | 2/1 | 0.557 | Fused in Pipeline 0 | +-------------------------------+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 13, total allocated memory: 184
分区定向关系类型扫描
PartitionedDirectedRelationshipTypeScan
是 DirectedRelationshipTypeScan
运算符的变体,由 并行运行时 使用。它允许将索引划分为不同的段,其中每个段可以独立并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH ()-[r: FRIENDS_WITH]->()
RETURN r
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 ++------------------------------------------+----+-------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------------------------+----+-------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | r | 12 | 12 | 12 | 0/0 | 0.560 | In Pipeline 1 | | | +----+-------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedDirectedRelationshipTypeScan | 1 | (anon_0)-[r:FRIENDS_WITH]->(anon_1) | 12 | 12 | 13 | 2/0 | 0.167 | In Pipeline 0 | +------------------------------------------+----+-------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 25
无向关系类型扫描
UndirectedRelationshipTypeScan
运算符从关系类型索引中获取具有特定类型的所有关系及其起始节点和结束节点。
PROFILE
MATCH ()-[r: FRIENDS_WITH]-()
RETURN r
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------------------+------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------------+------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | r | 24 | 24 | 0 | | | | | | | +------------------------------------+----------------+------+---------+----------------+ | | | | +UndirectedRelationshipTypeScan | (anon_0)-[r:FRIENDS_WITH]-(anon_1) | 24 | 24 | 13 | 120 | 2/1 | 0.749 | Fused in Pipeline 0 | +---------------------------------+------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 13, total allocated memory: 184
分区无向关系类型扫描
PartitionedUndirectedRelationshipTypeScan
是 UndirectedRelationshipTypeScan
运算符的变体,由 并行运行时 使用。它允许将索引划分为不同的段,其中每个段可以独立并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH ()-[r: FRIENDS_WITH]-()
RETURN r
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +--------------------------------------------+----+------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------------------------------+----+------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | r | 24 | 24 | 24 | 1/0 | 1.466 | In Pipeline 1 | | | +----+------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedUndirectedRelationshipTypeScan | 1 | (anon_0)-[r:FRIENDS_WITH]-(anon_1) | 24 | 24 | 13 | 2/0 | 0.171 | In Pipeline 0 | +--------------------------------------------+----+------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 37
定向联合关系类型扫描
DirectedUnionRelationshipTypesScan
运算符从关系类型索引中获取具有至少一个提供类型的所有关系及其起始节点和结束节点。
随着块存储格式成为默认值,该运算符将不再用于生成计划。有关可用的各种存储格式的详细信息,请参阅 操作手册 → 存储格式。 |
PROFILE
MATCH ()-[friendOrFoe: FRIENDS_WITH|FOE]->()
RETURN friendOrFoe
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------------------------+---------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +-------------------------------------+---------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------+---------------------+ | +ProduceResults | friendOrFoe | 15 | 12 | 0 | | | | | | | | +---------------------------------------------------+----------------+------+---------+----------------+ | | | | | +DirectedUnionRelationshipTypesScan | (anon_0)-[friendOrFoe:FRIENDS_WITH|FOE]->(anon_1) | 15 | 12 | 14 | 120 | 3/1 | 2.027 | friendOrFoe ASC | Fused in Pipeline 0 | +-------------------------------------+---------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------+---------------------+ Total database accesses: 14, total allocated memory: 184
分区定向联合关系类型扫描
PartitionedDirectedUnionRelationshipTypeScan
是 DirectedUnionRelationshipTypesScan
运算符的一种变体,由 并行运行时 使用。它允许将索引划分为不同的段,每个段可以独立地并行扫描。
随着块存储格式成为默认值,该运算符将不再用于生成计划。有关可用的各种存储格式的详细信息,请参阅 操作手册 → 存储格式。 |
CYPHER runtime=parallel
PROFILE
MATCH ()-[friendOrFoe: FRIENDS_WITH|FOE]->()
RETURN friendOrFoe
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +------------------------------------------------+----+---------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------------------------------+----+---------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | friendOrFoe | 15 | 12 | 12 | 0/0 | 0.570 | In Pipeline 1 | | | +----+---------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedDirectedUnionRelationshipTypesScan | 1 | (anon_0)-[friendOrFoe:FRIENDS_WITH|FOE]->(anon_1) | 15 | 12 | 13 | 2/0 | 0.170 | In Pipeline 0 | +------------------------------------------------+----+---------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 25
无向联合关系类型扫描
UndirectedUnionRelationshipTypesScan
运算符从关系类型索引中获取所有关系及其起点和终点节点,这些节点至少具有提供的类型之一。
随着块存储格式成为默认值,该运算符将不再用于生成计划。有关可用的各种存储格式的详细信息,请参阅 操作手册 → 存储格式。 |
PROFILE
MATCH ()-[friendOrFoe: FRIENDS_WITH|FOE]-()
RETURN friendOrFoe
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------------------------+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +---------------------------------------+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------+---------------------+ | +ProduceResults | friendOrFoe | 30 | 24 | 0 | | | | | | | | +--------------------------------------------------+----------------+------+---------+----------------+ | | | | | +UndirectedUnionRelationshipTypesScan | (anon_0)-[friendOrFoe:FRIENDS_WITH|FOE]-(anon_1) | 30 | 24 | 14 | 120 | 3/1 | 0.887 | friendOrFoe ASC | Fused in Pipeline 0 | +---------------------------------------+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------+---------------------+ Total database accesses: 14, total allocated memory: 184
分区无向联合关系类型扫描
PartitionedUndirectedUnionRelationshipTypeScan
是 UndirectedUnionRelationshipTypesScan
运算符的一种变体,由 并行运行时 使用。它允许将索引划分为不同的段,每个段可以独立地并行扫描。
随着块存储格式成为默认值,该运算符将不再用于生成计划。有关可用的各种存储格式的详细信息,请参阅 操作手册 → 存储格式。 |
CYPHER runtime=parallel
PROFILE
MATCH ()-[friendOrFoe: FRIENDS_WITH|FOE]-()
RETURN friendOrFoe
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +--------------------------------------------------+----+--------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------------------------------------+----+--------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | friendOrFoe | 30 | 24 | 24 | 0/0 | 0.896 | In Pipeline 1 | | | +----+--------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedUndirectedUnionRelationshipTypesScan | 1 | (anon_0)-[friendOrFoe:FRIENDS_WITH|FOE]-(anon_1) | 30 | 24 | 13 | 2/0 | 0.818 | In Pipeline 0 | +--------------------------------------------------+----+--------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 37
通过 ElementId 查找节点
NodeByElementIdSeek
运算符通过函数 elementId() 从节点存储中读取一个或多个节点 ID。
PROFILE
MATCH (n)
WHERE elementId(n) = 0
RETURN n
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | n | 1 | 1 | 0 | | | | | | | +-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------- | | | | +NodeByElementIdSeek | n WHERE elementId(n) = $autoint_0 | 1 | 1 | 1 | 120 | 3/0 | 2.108 | Fused in Pipeline 0 | +------------------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 1, total allocated memory: 184
通过 ID 查找节点
NodeByIdSeek
运算符通过函数 id() 从节点存储中读取一个或多个节点 ID。
PROFILE
MATCH (n)
WHERE id(n) = 0
RETURN n
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----+----------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----+----------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | n | 1 | 1 | 2 | 0 | | | | | | +----+----------------------------+----------------+------+---------+----------------+ | | | | +NodeByIdSeek | 1 | n WHERE id(n) = $autoint_0 | 1 | 1 | 1 | 248 | 2/0 | 1.109 | Fused in Pipeline 0 | +-----------------+----+----------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 3, total allocated memory: 312 1 row
通过标签扫描节点
NodeByLabelScan
运算符从节点标签索引中获取所有具有特定标签的节点。
PROFILE
MATCH (person:Person)
RETURN person
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | person | 14 | 14 | 0 | | | | | | | +---------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | person:Person | 14 | 14 | 15 | 120 | 2/1 | 0.522 | Fused in Pipeline 0 | +------------------+---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 15, total allocated memory: 184
分区通过标签扫描节点
PartitionedNodeByLabelScan
是 NodeByLabelScan
运算符的一种变体,由 并行运行时 使用。它允许将索引划分为不同的段,每个段可以独立地并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH (person:Person)
RETURN person
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +-----------------------------+----+---------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------------+----+---------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | person | 14 | 14 | 28 | 2/0 | 0.623 | In Pipeline 1 | | | +----+---------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedNodeByLabelScan | 1 | person:Person | 14 | 14 | 15 | 1/0 | 0.094 | In Pipeline 0 | +-----------------------------+----+---------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 43
节点索引查找
NodeIndexSeek
运算符使用索引查找查找节点。运算符参数中显示了节点变量和使用的索引。如果索引是唯一索引,则运算符被称为 NodeUniqueIndexSeek。
PROFILE
MATCH (location:Location {name: 'Malmo'})
RETURN location
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | location | 1 | 1 | 0 | | | | | | | +----------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexSeek | RANGE INDEX location:Location(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 120 | 2/1 | 0.401 | Fused in Pipeline 0 | +-----------------+----------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 2, total allocated memory: 184
分区节点索引查找
PartitionedNodeIndexSeek
是 NodeIndexSeek
运算符的一种变体,由 并行运行时 使用。它允许将索引划分为不同的段,每个段可以独立地并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH (location:Location {name: 'Malmo'})
RETURN location
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +---------------------------+----+----------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------+----+----------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | location | 0 | 1 | 2 | 2/0 | 0.179 | In Pipeline 1 | | | +----+----------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedNodeIndexSeek | 1 | RANGE INDEX location:Location(name) WHERE name = $autostring_0 | 0 | 1 | 2 | 1/0 | 0.167 | In Pipeline 0 | +---------------------------+----+----------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 4
节点唯一索引查找
NodeUniqueIndexSeek
运算符使用唯一索引中的索引查找查找节点。运算符参数中显示了节点变量和使用的索引。如果索引不是唯一的,则运算符被称为 NodeIndexSeek。如果索引查找用于解决 MERGE 子句,它也会被标记为 (Locking)
。这清楚地表明,从索引返回的任何节点都将被锁定,以防止并发冲突更新。
PROFILE
MATCH (t:Team {name: 'Malmo'})
RETURN t
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +----------------------+------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------+------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | t | 1 | 0 | 0 | | | | | | | +------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeUniqueIndexSeek | UNIQUE t:Team(name) WHERE name = $autostring_0 | 1 | 0 | 1 | 120 | 0/1 | 0.280 | Fused in Pipeline 0 | +----------------------+------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 1, total allocated memory: 184
多节点索引查找
MultiNodeIndexSeek
运算符使用多个索引查找查找节点。它支持对查询中的不同节点使用多个不同的索引。运算符参数中显示了节点变量和使用的索引。
运算符产生所有索引查找的笛卡尔积。例如,如果运算符执行两次查找,第一次查找找到节点 a1, a2
,第二次查找找到 b1, b2, b3
,则 MultiNodeIndexSeek
将产生行 (a1, b1), (a1, b2), (a1, b3), (a2, b1), (a2, b2), (a2, b3)
。
PROFILE
CYPHER runtime=pipelined
MATCH
(location:Location {name: 'Malmo'}),
(person:Person {name: 'Bob'})
RETURN location, person
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------+-----------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------+-----------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | location, person | 1 | 1 | 0 | | | | | | | +-----------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +MultiNodeIndexSeek | RANGE INDEX location:Location(name) WHERE name = $autostring_0, | 1 | 0 | 0 | 120 | 2/2 | 1.910 | Fused in Pipeline 0 | | | RANGE INDEX person:Person(name) WHERE name = $autostring_1 | | | | | | | | +---------------------+-----------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 0, total allocated memory: 184
断言多节点索引查找
AssertingMultiNodeIndexSeek
运算符用于确保不违反任何属性唯一性约束。示例查找具有提供的名称和 ID 的团队是否存在,如果不存在,则会创建该团队。由于 :Team(name)
和 :Team(id)
上存在两个属性唯一性约束,因此 UniqueIndexSeek
运算符找到的任何节点都必须是同一个节点,否则会违反约束。
PROFILE
MERGE (t:Team {name: 'Engineering', id: 42})
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------------+-----------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------------+-----------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | | 1 | 0 | 0 | | | | | | | +-----------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | | 1 | 0 | 0 | | | | | | | +-----------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Merge | CREATE (t:Team {name: $autostring_0, id: $autoint_1}) | 1 | 1 | 0 | | | | | | | +-----------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +AssertingMultiNodeIndexSeek | UNIQUE t:Team(name) WHERE name = $autostring_0, UNIQUE t:Team(id) WHERE id = $autoint_1 | 0 | 2 | 4 | 120 | 0/2 | 1.584 | Fused in Pipeline 0 | +------------------------------+-----------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 4, total allocated memory: 184
通过范围进行节点索引查找
NodeIndexSeekByRange
运算符使用索引查找查找节点,其中属性的值与给定的前缀 STRING
匹配。NodeIndexSeekByRange
可用于 STARTS WITH
和比较运算符,例如 <
、>
、<=
和 >=
。如果索引是唯一索引,则运算符被称为 NodeUniqueIndexSeekByRange
。
PROFILE
MATCH (l:Location)
WHERE l.name STARTS WITH 'Lon'
RETURN l
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------+-------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------+-------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | l | 2 | 1 | 0 | | | | | | | +-------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexSeekByRange | RANGE INDEX l:Location(name) WHERE name STARTS WITH $autostring_0 | 2 | 1 | 2 | 120 | 3/0 | 0.825 | Fused in Pipeline 0 | +-----------------------+-------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 2, total allocated memory: 184
分区通过范围进行节点索引查找
PartitionedNodeIndexSeekByRange
是 NodeIndexSeekByRange
运算符的一种变体,由 并行运行时 使用。它允许将索引划分为不同的段,每个段可以独立地并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH (l:Location)
WHERE l.name STARTS WITH 'Lon'
RETURN l
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +----------------------------------+----+-------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------------------+----+-------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | l | 0 | 1 | 2 | 2/0 | 0.191 | In Pipeline 1 | | | +----+-------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedNodeIndexSeekByRange | 1 | RANGE INDEX l:Location(name) WHERE name STARTS WITH $autostring_0 | 0 | 1 | 2 | 1/0 | 0.087 | In Pipeline 0 | +----------------------------------+----+-------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 4
节点唯一索引通过范围查找
NodeUniqueIndexSeekByRange
运算符使用唯一索引中的索引查找查找节点,其中属性的值与给定的前缀 STRING
匹配。NodeUniqueIndexSeekByRange
由 STARTS WITH
和比较运算符(例如 <
、>
、<=
和 >=
)使用。如果索引不是唯一的,则运算符被称为 NodeIndexSeekByRange
。
PROFILE
MATCH (t:Team)
WHERE t.name STARTS WITH 'Ma'
RETURN t
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------------+----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------------+----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | t | 2 | 0 | 0 | | | | | | | +----------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeUniqueIndexSeekByRange | UNIQUE t:Team(name) WHERE name STARTS WITH $autostring_0 | 2 | 0 | 1 | 120 | 1/0 | 0.623 | Fused in Pipeline 0 | +-----------------------------+----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 1, total allocated memory: 184
节点索引包含扫描
NodeIndexContainsScan
运算符检查存储在索引中的所有值,查找包含特定 STRING
的条目;例如,在包含 CONTAINS
的查询中。虽然这比索引查找慢(因为需要检查所有条目),但它仍然比使用 NodeByLabelScan
进行标签扫描以及属性存储过滤器产生的间接寻址更快。
PROFILE
MATCH (l:Location)
WHERE l.name CONTAINS 'al'
RETURN l
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------+---------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------+---------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | l | 0 | 2 | 0 | | | | | | | +---------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexContainsScan | TEXT INDEX l:Location(name) WHERE name CONTAINS $autostring_0 | 0 | 2 | 3 | 120 | 2/0 | 1.305 | Fused in Pipeline 0 | +------------------------+---------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 3, total allocated memory: 184
节点索引以...结尾扫描
NodeIndexEndsWithScan
运算符检查存储在索引中的所有值,查找以特定 STRING
结尾的条目;例如,在包含 ENDS WITH
的查询中。虽然这比索引查找慢(因为需要检查所有条目),但它仍然比使用 NodeByLabelScan
进行标签扫描以及属性存储过滤器产生的间接寻址更快。
PROFILE
MATCH (l:Location)
WHERE l.name ENDS WITH 'al'
RETURN l
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------+----------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------+----------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | l | 0 | 0 | 0 | | | | | | | +----------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexEndsWithScan | TEXT INDEX l:Location(name) WHERE name ENDS WITH $autostring_0 | 0 | 0 | 1 | 120 | 0/0 | 4.409 | Fused in Pipeline 0 | +------------------------+----------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 1, total allocated memory: 184
节点索引扫描
NodeIndexScan
运算符检查存储在索引中的所有值,返回具有特定标签和指定属性的所有节点。
PROFILE
MATCH (l:Location)
WHERE l.name IS NOT NULL
RETURN l
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+-----------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+-----------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | l | 10 | 10 | 0 | | | | | | | +-----------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexScan | RANGE INDEX l:Location(name) WHERE name IS NOT NULL | 10 | 10 | 11 | 120 | 2/1 | 0.557 | Fused in Pipeline 0 | +-----------------+-----------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 11, total allocated memory: 184
分区节点索引扫描
PartitionedNodeIndexScan
是 NodeIndexScan
运算符的一种变体,由 并行运行时 使用。它允许将索引划分为不同的段,每个段可以独立地并行扫描。
CYPHER runtime=parallel
PROFILE
MATCH (l:Location)
WHERE l.name IS NOT NULL
RETURN l
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +---------------------------+----+-----------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------+----+-----------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +ProduceResults | 0 | l | 1 | 10 | 20 | 2/0 | 0.472 | In Pipeline 1 | | | +----+-----------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ | +PartitionedNodeIndexScan | 1 | RANGE INDEX l:Location(name) WHERE name IS NOT NULL | 1 | 10 | 11 | 1/0 | 0.187 | In Pipeline 0 | +---------------------------+----+-----------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------+ Total database accesses: 31
应用
所有不同的 Apply
运算符(如下所示)共享相同的基本功能:它们通过从左侧获取一行并使用右侧的 Argument
运算符,在右侧执行运算符树来执行嵌套循环。Apply
运算符的版本在结果的管理方式上有所不同。Apply
运算符(即标准版本)获取右侧产生的行(此时包含来自左侧和右侧的数据)并产生该行。
PROFILE
MATCH (p:Person {name: 'me'})
MATCH (q:Person {name: p.secondName})
RETURN p, q
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | p, q | 1 | 0 | 0 | | | | | | | +-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Apply | | 1 | 0 | 0 | | | | | | |\ +-------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +NodeIndexSeek | RANGE INDEX q:Person(name) WHERE name = p.secondName | 1 | 0 | 0 | 2152 | 0/0 | 0.219 | Fused in Pipeline 1 | | | +-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeIndexSeek | RANGE INDEX p:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 120 | 0/1 | 0.236 | In Pipeline 0 | +------------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 2, total allocated memory: 2216
半应用
SemiApply
运算符测试模式谓词的存在,是 Apply
运算符的一种变体。如果右侧运算符产生至少一行,则左侧运算符的行将由 SemiApply
运算符产生。这使得 SemiApply
成为一个过滤运算符,主要用于查询中的模式谓词。
PROFILE
CYPHER runtime=slotted
MATCH (p:Person)
WHERE (p)-[:FRIENDS_WITH]->(:Person)
RETURN p.name
Planner COST Runtime SLOTTED Runtime version 5.25 +-----------------+-------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-----------------+-------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | `p.name` | 11 | 10 | 0 | 0/0 | | | +-------------------------------------+----------------+------+---------+------------------------+ | +Projection | p.name AS `p.name` | 11 | 10 | 10 | 1/0 | | | +-------------------------------------+----------------+------+---------+------------------------+ | +SemiApply | | 11 | 10 | 0 | 0/0 | | |\ +-------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_3:Person | 12 | 0 | 10 | 0/0 | | | | +-------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (p)-[anon_2:FRIENDS_WITH]->(anon_3) | 12 | 10 | 51 | 28/0 | | | | +-------------------------------------+----------------+------+---------+------------------------+ | | +Argument | p | 14 | 14 | 0 | 0/0 | | | +-------------------------------------+----------------+------+---------+------------------------+ | +NodeByLabelScan| p:Person | 14 | 14 | 35 | 1/0 | +-----------------+-------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 142, total allocated memory: 64
反半应用
AntiSemiApply
运算符测试模式的不存在,是 Apply
运算符的一种变体。如果右侧运算符不产生任何行,则左侧运算符的行将由 AntiSemiApply
运算符产生。这使得 AntiSemiApply
成为一个过滤运算符,用于查询中的模式谓词。
PROFILE
CYPHER runtime=slotted
MATCH
(me:Person {name: 'me'}),
(other:Person)
WHERE NOT (me)-[:FRIENDS_WITH]->(other)
RETURN other.name
Planner COST Runtime SLOTTED Runtime version 5.25 +-------------------+--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | +-------------------+--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ | +ProduceResults | `other.name` | 4 | 12 | 0 | | 0/0 | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ | +Projection | other.name AS `other.name` | 4 | 12 | 12 | | 1/0 | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ | +AntiSemiApply | | 4 | 12 | 0 | | 0/0 | | |\ +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ | | +Expand(Into) | (me)-[anon_2:FRIENDS_WITH]->(other) | 1 | 0 | 81 | 896 | 28/0 | | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ | | +Argument | me, other | 14 | 14 | 0 | | 0/0 | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ | +CartesianProduct | | 14 | 14 | 0 | | 0/0 | | |\ +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ | | +NodeByLabelScan| other:Person | 14 | 14 | 35 | | 1/0 | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ | +NodeIndexSeek | RANGE INDEX me:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | | 0/1 | +-------------------+--------------------------------------------------------+----------------+------+---------+----------------+------------------------+ Total database accesses: 166, total allocated memory: 976
事务应用
TransactionApply
的工作方式类似于 Apply
运算符,但在指定行数后会提交当前事务。
以下查询使用 变量作用域子句(在 Neo4j 5.23 中引入)将变量导入 CALL 子查询。如果您使用的是较旧版本的 Neo4j,请改为使用 导入 WITH 子句。 |
PROFILE
LOAD CSV FROM 'https://neo4j.ac.cn/docs/cypher-refcard/3.3/csv/artists.csv' AS line
CALL (line) {
CREATE (a: Artist {name: line[0]})
RETURN a
} IN TRANSACTIONS OF 100 ROWS
RETURN a;
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------+----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------+----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | a | 10 | 4 | 8 | 0 | | | | | | +----+--------------------------------------------------+----------------+------+---------+----------------+ | | | | +TransactionApply | 1 | IN TRANSACTIONS OF $autoint_1 ROWS ON ERROR FAIL | 10 | 4 | 0 | 2152 | 0/0 | 2.036 | Fused in Pipeline 3 | | |\ +----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Create | 2 | (a:Artist {name: line[$autoint_0]}) | 10 | 4 | 16 | | | | | | | | +----+--------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | 3 | line | 10 | 4 | 0 | 3472 | 0/0 | 32.746 | Fused in Pipeline 2 | | | +----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +LoadCSV | 4 | line | 10 | 4 | 0 | 328 | | | In Pipeline 1 | +-------------------+----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 24, total allocated memory: 5472
反
Anti
运算符测试模式的不存在。如果有传入的行,则 Anti
运算符不会产生任何行。如果没有传入的行,则 Anti
运算符将产生一行。
PROFILE
CYPHER runtime=pipelined
MATCH
(me:Person {name: 'me'}),
(other:Person)
WHERE NOT (me)-[:FRIENDS_WITH]->(other)
RETURN other.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------+--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------+--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | `other.name` | 4 | 12 | 0 | | 0/0 | 0.068 | | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +Projection | other.name AS `other.name` | 4 | 12 | 24 | | 2/0 | 0.111 | In Pipeline 4 | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Apply | | 4 | 12 | 0 | | 0/0 | | | | |\ +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Anti | | 4 | 12 | 0 | 1256 | 0/0 | 0.084 | In Pipeline 4 | | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Limit | 1 | 11 | 2 | 0 | 752 | | | | | | | +--------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(Into) | (me)-[anon_2:FRIENDS_WITH]->(other) | 1 | 2 | 81 | 2632 | | | | | | | +--------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | me, other | 14 | 14 | 0 | 3192 | 1/0 | 0.904 | Fused in Pipeline 3 | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +CartesianProduct | | 14 | 14 | 0 | 3672 | | 1.466 | In Pipeline 2 | | |\ +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +NodeByLabelScan| other:Person | 14 | 14 | 35 | | | | | | | +--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeIndexSeek | RANGE INDEX me:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 120 | 0/1 | 0.493 | In Pipeline 0 | +-------------------+--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 178, total allocated memory: 6744
让半应用
LetSemiApply
运算符测试模式谓词的存在,是 Apply
运算符的一种变体。当查询包含用 OR
分隔的多个模式谓词时,LetSemiApply
将用于评估这些谓词中的第一个。它将记录评估谓词的结果,但会将任何过滤留给另一个运算符。在示例中,LetSemiApply
将用于检查每个人的 FRIENDS_WITH
关系是否存在。
PROFILE
CYPHER runtime=slotted
MATCH (other:Person)
WHERE (other)-[:FRIENDS_WITH]->(:Person) OR (other)-[:WORKS_IN]->(:Location)
RETURN other.name
Planner COST Runtime SLOTTED Runtime version 5.25 +--------------------+-----------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +--------------------+-----------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | `other.name` | 13 | 14 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +Projection | other.name AS `other.name` | 13 | 14 | 14 | 1/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +SelectOrSemiApply | anon_9 | 14 | 14 | 0 | 0/0 | | |\ +-----------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_7:Location | 14 | 0 | 4 | 0/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (other)-[anon_6:WORKS_IN]->(anon_7) | 14 | 4 | 15 | 8/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Argument | other | 14 | 4 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +LetSemiApply | | 14 | 14 | 0 | 0/0 | | |\ +-----------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_5:Person | 12 | 0 | 10 | 0/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (other)-[anon_4:FRIENDS_WITH]->(anon_5) | 12 | 10 | 51 | 28/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Argument | other | 14 | 14 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +NodeByLabelScan | other:Person | 14 | 14 | 35 | 1/0 | +--------------------+-----------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 165, total allocated memory: 64
让反半应用
LetAntiSemiApply
运算符测试模式的不存在,是 Apply
运算符的一种变体。当查询包含多个否定模式谓词(即用 OR
分隔的谓词,其中至少一个谓词包含 NOT
)时,LetAntiSemiApply
将用于评估这些谓词中的第一个。它将记录评估谓词的结果,但会将任何过滤留给另一个运算符。在示例中,LetAntiSemiApply
将用于检查每个人的 FRIENDS_WITH
关系是否存在。
PROFILE
CYPHER runtime=slotted
MATCH (other:Person)
WHERE NOT ((other)-[:FRIENDS_WITH]->(:Person)) OR (other)-[:WORKS_IN]->(:Location)
RETURN other.name
Planner COST Runtime SLOTTED Runtime version 5.25 +--------------------+-----------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +--------------------+-----------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | `other.name` | 11 | 14 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +Projection | other.name AS `other.name` | 11 | 14 | 14 | 1/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +SelectOrSemiApply | anon_9 | 14 | 14 | 0 | 0/0 | | |\ +-----------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_7:Location | 14 | 0 | 10 | 0/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (other)-[anon_6:WORKS_IN]->(anon_7) | 14 | 10 | 38 | 20/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Argument | other | 14 | 10 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +LetAntiSemiApply | | 14 | 14 | 0 | 0/0 | | |\ +-----------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_5:Person | 12 | 0 | 10 | 0/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (other)-[anon_4:FRIENDS_WITH]->(anon_5) | 12 | 10 | 51 | 28/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Argument | other | 14 | 14 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +NodeByLabelScan | p:Person | 14 | 14 | 35 | 1/0 | +--------------------+-----------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 142, total allocated memory: 64
选择或半应用
SelectOrSemiApply
运算符测试模式谓词的存在并评估谓词,它是 Apply
运算符的变体。此运算符允许混合正常的谓词和模式谓词,模式谓词检查模式是否存在。首先,评估正常的表达式谓词,并且,只有当它返回 false
时,才会评估代价高的模式谓词。
PROFILE
MATCH (other:Person)
WHERE other.age > 25 OR (other)-[:FRIENDS_WITH]->(:Person)
RETURN other.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +--------------------+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | `other.name` | 11 | 10 | 0 | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | +Projection | other.name AS `other.name` | 11 | 10 | 20 | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | +SelectOrSemiApply | other.age > $autoint_0 | 14 | 10 | 0 | 392 | 0/0 | 0.190 | Fused in Pipeline 2 | | |\ +-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Limit | 1 | 14 | 10 | 0 | 752 | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | | +Filter | anon_3:Person | 12 | 10 | 20 | | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(All) | (other)-[anon_2:FRIENDS_WITH]->(anon_3) | 12 | 10 | 37 | | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | other | 14 | 14 | 0 | 2168 | 2/0 | 0.435 | Fused in Pipeline 1 | | | +-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeByLabelScan | other:Person | 14 | 14 | 35 | | | | Fused in Pipeline 0 | +--------------------+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 148, total allocated memory: 2952
Select Or Anti Semi Apply
SelectOrAntiSemiApply
运算符用于评估谓词和否定模式谓词(即以 NOT
开头的模式谓词)之间的 OR
,它是 Apply
运算符的变体。如果谓词返回 true
,则不会测试模式谓词。如果谓词返回 false
或 null
,则 SelectOrAntiSemiApply
将改为测试模式谓词。
PROFILE
MATCH (other:Person)
WHERE other.age > 25 OR NOT (other)-[:FRIENDS_WITH]->(:Person)
RETURN other.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | `other.name` | 4 | 4 | 0 | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | +Projection | other.name AS `other.name` | 4 | 4 | 8 | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | +SelectOrAntiSemiApply | other.age > $autoint_0 | 14 | 4 | 0 | 200 | 0/0 | 0.155 | Fused in Pipeline 3 | | |\ +-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Anti | | 14 | 4 | 0 | 1256 | 0/0 | 0.170 | In Pipeline 2 | | | | +-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Limit | 1 | 0 | 10 | 0 | 752 | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | | +Filter | anon_3:Person | 12 | 10 | 20 | | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(All) | (other)-[anon_2:FRIENDS_WITH]->(anon_3) | 12 | 10 | 37 | | | | | | | | +-----------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | other | 14 | 14 | 0 | 2168 | 2/0 | 0.449 | Fused in Pipeline 1 | | | +-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeByLabelScan | other:Person | 14 | 14 | 35 | | | | Fused in Pipeline 0 | +------------------------+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 136, total allocated memory: 4208
Let Select Or Semi Apply
LetSelectOrSemiApply
运算符是为使用 OR
与其他谓词组合的模式谓词而计划的。这是 Apply
运算符的变体。
PROFILE
CYPHER runtime=slotted
MATCH (other:Person)
WHERE (other)-[:FRIENDS_WITH]->(:Person) OR (other)-[:WORKS_IN]->(:Location) OR other.age = 5
RETURN other.name
Planner COST Runtime SLOTTED Runtime version 5.25 +-----------------------+-----------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-----------------------+-----------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | `other.name` | 13 | 14 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +Projection | other.name AS `other.name` | 13 | 14 | 14 | 1/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +SelectOrSemiApply | anon_9 | 14 | 14 | 0 | 0/0 | | |\ +-----------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_7:Location | 14 | 0 | 4 | 0/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (other)-[anon_6:WORKS_IN]->(anon_7) | 14 | 4 | 15 | 8/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Argument | other | 14 | 4 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +LetSelectOrSemiApply | other.age = $autoint_0 | 14 | 14 | 14 | 0/0 | | |\ +-----------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_5:Person | 12 | 0 | 10 | 0/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (other)-[anon_4:FRIENDS_WITH]->(anon_5) | 12 | 10 | 51 | 28/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Argument | other | 14 | 14 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +NodeByLabelScan | other:Person | 14 | 14 | 35 | 1/0 | +-----------------------+-----------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 179, total allocated memory: 64
Let Select Or Anti Semi Apply
LetSelectOrAntiSemiApply
运算符是为使用 OR
与其他谓词组合的否定模式谓词(即以 NOT
开头的模式谓词)而计划的。此运算符是 Apply
运算符的变体。
PROFILE
CYPHER runtime=slotted
MATCH (other:Person)
WHERE NOT (other)-[:FRIENDS_WITH]->(:Person) OR (other)-[:WORKS_IN]->(:Location) OR other.age = 5
RETURN other.name
Planner COST Runtime SLOTTED Runtime version 5.25 +---------------------------+-----------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +---------------------------+-----------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | `other.name` | 12 | 14 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +Projection | other.name AS `other.name` | 12 | 14 | 14 | 1/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +SelectOrSemiApply | anon_9 | 14 | 14 | 0 | 0/0 | | |\ +-----------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_7:Location | 14 | 0 | 10 | 0/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (other)-[anon_6:WORKS_IN]->(anon_7) | 14 | 10 | 38 | 20/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Argument | other | 14 | 10 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +LetSelectOrAntiSemiApply | other.age = $autoint_0 | 14 | 14 | 14 | 0/0 | | |\ +-----------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_5:Person | 12 | 0 | 10 | 0/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (other)-[anon_4:FRIENDS_WITH]->(anon_5) | 12 | 10 | 51 | 28/0 | | | | +-----------------------------------------+----------------+------+---------+------------------------+ | | +Argument | other | 14 | 14 | 0 | 0/0 | | | +-----------------------------------------+----------------+------+---------+------------------------+ | +NodeByLabelScan | other:Person | 14 | 14 | 35 | 1/0 | +---------------------------+-----------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 208, total allocated memory: 64
Merge
Merge
运算符将读取或创建节点和/或关系。
如果找到匹配项,它将针对每个传入行执行提供的 ON MATCH
操作。如果未找到匹配项,则改为创建节点和关系,并运行所有 ON CREATE
操作。
PROFILE
MERGE (p:Person {name: 'Andy'})
ON MATCH SET p.existed = true
ON CREATE SET p.existed = false
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+-------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+-------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | | 1 | 0 | 0 | | | | | | | +-------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | | 1 | 0 | 0 | | | | | | | +-------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Merge | CREATE (p:Person {name: $autostring_0}), ON MATCH SET p.existed = true, | 1 | 1 | 2 | | | | | | | | ON CREATE SET p.existed = false | | | | | | | | | | +-------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexSeek | RANGE INDEX p:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 120 | 2/1 | 0.749 | Fused in Pipeline 0 | +-----------------+-------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 4, total allocated memory: 184
Locking Merge
LockingMerge
运算符类似于 Merge
运算符,但在必要时创建关系时会锁定起点和终点节点。
PROFILE
MATCH (s:Person {name: 'me'})
MERGE (s)-[:FRIENDS_WITH]->(s)
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | | 1 | 0 | 0 | | | | | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | 1 | | 1 | 0 | 0 | | | | | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Apply | 2 | | 1 | 1 | 0 | | | | | | |\ +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +LockingMerge | 3 | CREATE (s)-[anon_0:FRIENDS_WITH]->(s), LOCK(s) | 1 | 1 | 1 | | | | | | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(Into) | 4 | (s)-[anon_0:FRIENDS_WITH]->(s) | 0 | 0 | 10 | 904 | | | | | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | 5 | s | 1 | 3 | 0 | 2280 | 2/0 | 0.460 | Fused in Pipeline 1 | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeIndexSeek | 6 | RANGE INDEX s:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 376 | 1/0 | 0.211 | In Pipeline 0 | +-----------------+----+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 15, total allocated memory: 2232
Roll Up Apply
RollUpApply
运算符用于执行表达式,该表达式以模式为输入,并返回包含匹配模式内容的列表;例如,在查询中使用模式表达式或模式理解时。此运算符是 Apply
运算符的变体。
PROFILE
CYPHER runtime=slotted
MATCH (p:Person)
RETURN p.name, [(p)-[:WORKS_IN]->(location) | location.name] AS cities
Planner COST Runtime SLOTTED Runtime version 5.25 +-----------------+-----------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-----------------+-----------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | `p.name`, cities | 14 | 14 | 0 | 0/0 | | | +-----------------------------------+----------------+------+---------+------------------------+ | +Projection | p.name AS `p.name` | 14 | 14 | 14 | 0/0 | | | +-----------------------------------+----------------+------+---------+------------------------+ | +RollUpApply | cities, anon_0 | 14 | 14 | 0 | 0/0 | | |\ +-----------------------------------+----------------+------+---------+------------------------+ | | +Projection | location.name AS anon_0 | 15 | 15 | 15 | 1/0 | | | | +-----------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (p)-[anon_2:WORKS_IN]->(location) | 15 | 15 | 53 | 28/0 | | | | +-----------------------------------+----------------+------+---------+------------------------+ | | +Argument | p | 14 | 14 | 0 | 0/0 | | | +-----------------------------------+----------------+------+---------+------------------------+ | +NodeByLabelScan| p:Person | 14 | 14 | 35 | 1/0 | +-----------------+-----------------------------------+----------------+------+---------+------------------------+ Total database accesses: 153, total allocated memory: 64
Argument
Argument
运算符指示要用作 Apply
运算符右侧操作数的变量。
PROFILE
MATCH (s:Person {name: 'me'})
MERGE (s)-[:FRIENDS_WITH]->(s)
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | | 1 | 0 | 0 | | | | | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | 1 | | 1 | 0 | 0 | | | | | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Apply | 2 | | 1 | 1 | 0 | | | | | | |\ +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +LockingMerge | 3 | CREATE (s)-[anon_0:FRIENDS_WITH]->(s), LOCK(s) | 1 | 1 | 1 | | | | | | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(Into) | 4 | (s)-[anon_0:FRIENDS_WITH]->(s) | 0 | 0 | 10 | 904 | | | | | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | 5 | s | 1 | 3 | 0 | 2280 | 2/0 | 0.460 | Fused in Pipeline 1 | | | +----+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeIndexSeek | 6 | RANGE INDEX s:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 376 | 1/0 | 0.211 | In Pipeline 0 | +-----------------+----+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 15, total allocated memory: 2232
Argument Tracker
ArgumentTracker
运算符用于确保逐行语义。这限制了 Cypher 运行时,使其不以更大的块批量处理操作。
以下查询使用 变量作用域子句(在 Neo4j 5.23 中引入)将变量导入 CALL 子查询。如果您使用的是较旧版本的 Neo4j,请改为使用 导入 WITH 子句。 |
PROFILE
MATCH (s:Person {name: 'me'})
CALL (s) {
SET s.seen = coalesce(s.seen + 1,1)
RETURN s.seen AS result
}
RETURN result;
Planner COST Runtime PIPELINED Runtime version 5.25 +--------------------+----+---------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------+----+---------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | result | 1 | 1 | 0 | 0 | | | | | | +----+---------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Apply | 1 | | 1 | 0 | 0 | | | | | | |\ +----+---------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +ArgumentTracker | 7 | | 1 | 0 | 0 | 736 | | | | | | | +----+---------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Projection | 2 | s.seen AS result | 1 | 1 | 2 | | | | | | | | +----+---------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Eager | 3 | read/set conflict for property: seen (Operator: 4 vs 2) | 1 | 1 | 0 | 976 | 0/0 | 0.298 | Fused in Pipeline 2 | | | | +----+---------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +SetProperty | 4 | s.seen = coalesce(s.seen + $autoint_1, $autoint_2) | 1 | 1 | 2 | | | | | | | | +----+---------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | 5 | s | 1 | 1 | 0 | 2408 | 2/0 | 1.734 | Fused in Pipeline 1 | | | +----+---------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeIndexSeek | 6 | RANGE INDEX s:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 368 | 1/0 | 0.183 | In Pipeline 0 | +--------------------+----+---------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 6, total allocated memory: 4136
Expand All
给定一个起点节点,并且根据模式关系,Expand(All)
运算符将遍历传入或传出的关系。
PROFILE
MATCH (p:Person {name: 'me'})-[:FRIENDS_WITH]->(fof)
RETURN fof
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | fof | 1 | 2 | 0 | | | | | | | +-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Expand(All) | (p)-[anon_0:FRIENDS_WITH]->(fof) | 1 | 2 | 5 | | | | | | | +-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexSeek | RANGE INDEX p:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 120 | 4/1 | 1.137 | Fused in Pipeline 0 | +-----------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 7, total allocated memory: 184
Expand Into
当起点和终点节点都已找到时,Expand(Into)
运算符用于查找连接这两个节点的所有关系。由于关系的起点和终点节点已经在范围内,因此将使用度数最小的节点。当密集节点作为端点出现时,这会产生显着差异。
PROFILE
MATCH (p:Person {name: 'me'})-[:FRIENDS_WITH]->(fof)-->(p)
RETURN fof
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | fof | 0 | 0 | 0 | | | | | | | +-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Filter | not anon_1 = anon_0 | 0 | 0 | 0 | | | | | | | +-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Expand(Into) | (p)-[anon_0:FRIENDS_WITH]->(fof) | 0 | 0 | 6 | 896 | | | | | | +-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Expand(All) | (p)<-[anon_1]-(fof) | 1 | 1 | 5 | | | | | | | +-------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexSeek | RANGE INDEX p:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 120 | 4/1 | 0.546 | Fused in Pipeline 0 | +-----------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 13, total allocated memory: 976
Optional Expand All
OptionalExpand(All)
运算符类似于 Expand(All),不同之处在于没有关系与方向、类型和属性谓词匹配。在这种情况下,OptionalExpand(all)
将返回一行,其中关系和终点节点设置为 null
。
PROFILE
MATCH (p:Person)
OPTIONAL MATCH (p)-[works_in:WORKS_IN]->(l)
WHERE works_in.duration > 180
RETURN p, l
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +----------------------+-------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------+-------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | p, l | 14 | 15 | 1 | | | | | | | +-------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +OptionalExpand(All) | (p)-[works_in:WORKS_IN]->(l) WHERE works_in.duration > $autoint_0 | 14 | 15 | 53 | | | | | | | +-------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | p:Person | 14 | 14 | 15 | 120 | 5/0 | 1,233 | Fused in Pipeline 0 | +----------------------+-------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 125, total allocated memory: 184
Optional Expand Into
OptionalExpand(Into)
运算符类似于 Expand(Into),不同之处在于没有找到匹配的关系。在这种情况下,OptionalExpand(Into)
将返回一行,其中关系和终点节点设置为 null
。由于关系的起点和终点节点已经在范围内,因此将使用度数最小的节点。当密集节点作为端点出现时,这会产生显着差异。
PROFILE
MATCH (p:Person)-[works_in:WORKS_IN]->(l)
OPTIONAL MATCH (l)-->(p)
RETURN p
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------+------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------+------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | p | 15 | 15 | 0 | | | | | | | +------------------------------+----------------+------+---------+----------------+ | | | | +OptionalExpand(Into) | (l)-[anon_0]->(p) | 15 | 15 | 105 | 3360 | | | | | | +------------------------------+----------------+------+---------+----------------+ | | | | +Expand(All) | (p)-[works_in:WORKS_IN]->(l) | 15 | 15 | 39 | | | | | | | +------------------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | p:Person | 14 | 14 | 15 | 120 | 7/0 | 3,925 | Fused in Pipeline 0 | +-----------------------+--- --------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 215, total allocated memory: 3440
VarLength Expand All
给定一个起点节点,VarLengthExpand(All)
运算符将遍历可变长度和量化关系。
PROFILE
MATCH (p:Person)-[:FRIENDS_WITH *1..2]-(q:Person)
RETURN p, q
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | p, q | 40 | 48 | 0 | | | | | | | +-----------------------------------+----------------+------+---------+----------------+ | | | | +Filter | q:Person | 40 | 48 | 96 | | | | | | | +-----------------------------------+----------------+------+---------+----------------+ | | | | +VarLengthExpand(All) | (p)-[anon_0:FRIENDS_WITH*..2]-(q) | 40 | 48 | 151 | 128 | | | | | | +-----------------------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | p:Person | 14 | 14 | 15 | 120 | 6/0 | 10,457 | Fused in Pipeline 0 | +-----------------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 318, total allocated memory: 208
VarLength Expand Into
当起点和终点节点都已找到时,VarLengthExpand(Into)
运算符用于查找连接这两个节点的所有可变长度和量化关系。
PROFILE
MATCH (p:Person)-[:FRIENDS_WITH *1..2]-(p:Person)
RETURN p
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | p | 3 | 4 | 0 | | | | | | | +-----------------------------------+----------------+------+---------+----------------+ | | | | +VarLengthExpand(Into) | (p)-[anon_0:FRIENDS_WITH*..2]-(p) | 3 | 4 | 151 | 128 | | | | | | +-----------------------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | p:Person | 14 | 14 | 15 | 120 | 6/0 | 0,797 | Fused in Pipeline 0 | +------------------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 222, total allocated memory: 192
VarLength Expand Pruning
给定一个起点节点,VarLengthExpand(Pruning)
运算符将遍历可变长度和量化关系,类似于 VarLengthExpand(All)
运算符。但是,作为一种优化,如果可以保证某些路径会产生已经找到的终点节点(通过之前的路径遍历),则不会探索这些路径。
这种类型的扩展仅在以下情况下才会被规划:
-
各个路径并不重要。
-
关系具有上限。
VarLengthExpand(Pruning)
运算符保证所有生成的终点节点都是唯一的。
PROFILE
MATCH (p:Person)-[:FRIENDS_WITH *3..4]-(q:Person)
RETURN DISTINCT p, q
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------------+----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +---------------------------+----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------+ | +ProduceResults | 0 | p, q | 0 | 0 | 0 | | 0/0 | 0.005 | | | | | +----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +OrderedDistinct | 1 | p, q | 0 | 0 | 0 | 40 | 0/0 | 0.014 | | | | | +----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +Filter | 2 | q:Person | 0 | 0 | 0 | | 0/0 | 0.014 | | | | | +----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +VarLengthExpand(Pruning) | 3 | (p)-[:FRIENDS_WITH*3..4]-(q) | 1 | 0 | 15 | 400 | | | | In Pipeline 1 | | | +----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+ +---------------+ | +NodeByLabelScan | 4 | p:Person | 14 | 14 | 15 | 120 | 1/0 | 0.020 | p ASC | In Pipeline 0 | +---------------------------+----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------+ Total database accesses: 30, total allocated memory: 480
Breadth First VarLength Expand Pruning
给定一个起点节点,VarLengthExpand(Pruning,BFS,All)
运算符会遍历可变长度和量化关系,类似于 VarLengthExpand(All)
运算符。但是,作为一种优化,它会改为执行广度优先搜索 (BFS),并且在扩展时,如果可以保证某些路径会产生已经找到的终点节点(通过之前的路径遍历),则不会探索这些路径。这仅用于各个路径并不重要的场合。
这种类型的扩展仅在以下情况下才会被规划:
-
各个路径并不重要。
-
下限为
0
或1
(默认值)。
此运算符保证所有生成的终点节点都是唯一的。
PROFILE
MATCH (p:Person)-[:FRIENDS_WITH *..4]-(q:Person)
RETURN DISTINCT p, q
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------------------+----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +-----------------------------------+----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | +ProduceResults | 0 | p, q | 12 | 0 | 0 | 0 | | | | | | | +----+------------------------------+----------------+------+---------+----------------+ | | | | | +OrderedDistinct | 1 | p, q | 12 | 0 | 0 | 40 | | | | | | | +----+------------------------------+----------------+------+---------+----------------+ | | | | | +Filter | 2 | q:Person | 13 | 0 | 0 | | | | | | | | +----+------------------------------+----------------+------+---------+----------------+ | | | | | +VarLengthExpand(Pruning,BFS,All) | 3 | (p)-[:FRIENDS_WITH*..4]-(q) | 13 | 0 | 38 | 952 | | | | | | | +----+------------------------------+----------------+------+---------+----------------+ | | | | | +NodeByLabelScan | 4 | p:Person | 10 | 10 | 11 | 248 | 3/0 | 4.662 | p ASC | Fused in Pipeline 0 | +-----------------------------------+----+------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ Total database accesses: 49, total allocated memory: 1200
Repeat (Trail)
给定一个起点节点,Repeat(Trail)
运算符将遍历 量化路径模式,这些模式无法用 VarLengthExpand(All)
运算符解决(或无法有效解决)。类似于 Apply
运算符,它从左侧获取一行,并应用右侧的操作符。但是,与 Apply
不同的是,它会根据量化路径模式上的量词重复应用这些操作符。在以下示例中,运算符将重复两次,并为两次重复生成行。
PROFILE
MATCH (me:Person) ((a)-[:FRIENDS_WITH]-(b)-[:FRIENDS_WITH]-(c) WHERE a.name <> b.name AND a.name <> c.name AND b.name <> c.name){1,2} (friend:Person)
RETURN me, friend
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | me, friend | 2 | 34 | 136 | 0 | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Filter | 1 | friend:Person | 2 | 34 | 68 | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NullifyMetadata | 9 | | 2 | 34 | 0 | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Repeat(Trail) | 2 | (me) (...){1, 2} (friend) | 2 | 34 | 0 | 29792 | 0/0 | 1.696 | Fused in Pipeline 2 | | |\ +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Filter | 3 | NOT anon_5 = anon_3 AND (NOT cache[a.name] = cache[c.name] AND NOT cache[b.name] = cache[c.name]) AN | 1 | 34 | 92 | | | | | | | | | | D isRepeatTrailUnique(anon_5) | | | | | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(All) | 4 | (b)-[anon_5:FRIENDS_WITH]-(c) | 3 | 92 | 138 | | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Filter | 5 | NOT cache[a.name] = cache[b.name] AND isRepeatTrailUnique(anon_3) | 5 | 46 | 198 | | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(All) | 6 | (a)-[anon_3:FRIENDS_WITH]-(b) | 10 | 66 | 100 | | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | 7 | a | 15 | 34 | 0 | 15672 | 2/0 | 3.245 | Fused in Pipeline 1 | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeByLabelScan | 8 | me:Person | 14 | 14 | 15 | 376 | 1/0 | 0.107 | In Pipeline 0 | +------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 747, total allocated memory: 45832
Nullify Metadata
NullifyMetadata
负责清理 Repeat(Trail)
生成的状态。它仅在 Repeat(Trail)
之后直接被规划。
PROFILE
MATCH (me:Person) ((a)-[:FRIENDS_WITH]-(b)-[:FRIENDS_WITH]-(c) WHERE a.name <> b.name AND a.name <> c.name AND b.name <> c.name){1,2} (friend:Person)
RETURN me, friend
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | me, friend | 2 | 34 | 136 | 0 | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Filter | 1 | friend:Person | 2 | 34 | 68 | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NullifyMetadata | 9 | | 2 | 34 | 0 | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Repeat(Trail) | 2 | (me) (...){1, 2} (friend) | 2 | 34 | 0 | 29792 | 0/0 | 1.696 | Fused in Pipeline 2 | | |\ +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Filter | 3 | NOT anon_5 = anon_3 AND (NOT cache[a.name] = cache[c.name] AND NOT cache[b.name] = cache[c.name]) AN | 1 | 34 | 92 | | | | | | | | | | D isRepeatTrailUnique(anon_5) | | | | | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(All) | 4 | (b)-[anon_5:FRIENDS_WITH]-(c) | 3 | 92 | 138 | | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Filter | 5 | NOT cache[a.name] = cache[b.name] AND isRepeatTrailUnique(anon_3) | 5 | 46 | 198 | | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(All) | 6 | (a)-[anon_3:FRIENDS_WITH]-(b) | 10 | 66 | 100 | | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | 7 | a | 15 | 34 | 0 | 15672 | 2/0 | 3.245 | Fused in Pipeline 1 | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeByLabelScan | 8 | me:Person | 14 | 14 | 15 | 376 | 1/0 | 0.107 | In Pipeline 0 | +------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 747, total allocated memory: 45832
Assert Same Node
AssertSameNode
运算符用于确保在插槽式和解释式运行时不会违反任何节点属性唯一性约束。此示例查找是否存在具有提供的名称和 ID 的团队节点,如果不存在,则会创建它。由于在 :Team(name)
和 :Team(id)
上存在两个节点属性唯一性约束,因此,任何由 UniqueIndexSeek
运算符找到的节点都必须是同一个节点,否则约束将被违反。
PROFILE
CYPHER runtime=slotted
MERGE (t:Team {name: 'Engineering', id: 42})
Planner COST Runtime SLOTTED Runtime version 5.25 +---------------------------------+-------------------------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +---------------------------------+-------------------------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | | 1 | 0 | 0 | 0/0 | | | +-------------------------------------------------------+----------------+------+---------+------------------------+ | +EmptyResult | | 1 | 0 | 0 | 0/0 | | | +-------------------------------------------------------+----------------+------+---------+------------------------+ | +Merge | CREATE (t:Team {name: $autostring_0, id: $autoint_1}) | 1 | 1 | 0 | 0/0 | | | +-------------------------------------------------------+----------------+------+---------+------------------------+ | +AssertSameNode | t | 0 | 1 | 0 | 0/0 | | |\ +-------------------------------------------------------+----------------+------+---------+------------------------+ | | +NodeUniqueIndexSeek(Locking) | UNIQUE t:Team(id) WHERE id = $autoint_1 | 1 | 1 | 1 | 0/1 | | | +-------------------------------------------------------+----------------+------+---------+------------------------+ | +NodeUniqueIndexSeek(Locking) | UNIQUE t:Team(name) WHERE name = $autostring_0 | 1 | 1 | 1 | 0/1 | +---------------------------------+-------------------------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 2, total allocated memory: 64
Assert Same Relationship
AssertSameRelationship
运算符用于确保在插槽式和解释式运行时不会违反任何关系属性唯一性约束。此示例查找是否存在具有提供的 id
和 badgeNumber
的 WORKS_IN
关系。如果找不到,则会创建它。由于在 :WORKS_IN(id)
和 :WORKS_IN(badgeNumber)
上存在两个属性唯一性约束,因此,任何由 DirectedRelationshipUniqueIndexSeek
运算符找到的关系都必须是同一个关系,否则约束将被违反。
PROFILE
CYPHER runtime=slotted
MERGE (person)-[work:WORKS_IN {id: 0, badgeNumber: 4332}]->(location)
Planner COST Runtime SLOTTED Runtime version 5.25 +-------------------------------------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-------------------------------------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | 0 | | 1 | 0 | 0 | 0/0 | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | +EmptyResult | 1 | | 1 | 0 | 0 | 0/0 | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | +Merge | 2 | CREATE (person), (location), (person)-[work:WORKS_IN {id: $autoint_0, badgeNumber: $autoint_1}]->(lo | 1 | 1 | 0 | 0/0 | | | | | cation) | | | | | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | +AssertSameRelationship | 3 | work | 0 | 1 | 0 | 0/0 | | |\ +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | | +DirectedRelationshipUniqueIndexSeek(Locking) | 4 | RANGE INDEX (person)-[work:WORKS_IN(badgeNumber)]->(location) WHERE badgeNumber = $autoint_1 | 1 | 1 | 1 | 0/1 | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | +DirectedRelationshipUniqueIndexSeek(Locking) | 5 | RANGE INDEX (person)-[work:WORKS_IN(id)]->(location) WHERE id = $autoint_0 | 1 | 1 | 1 | 1/1 | +-------------------------------------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 2, total allocated memory: 64
Empty Result
EmptyResult
运算符会急切地加载所有传入数据并丢弃它。
PROFILE
CREATE (:Person)
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+-----------------+----------------+------+---------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+-----------------+----------------+------+---------+------------------------+-----------+---------------------+ | +ProduceResults | | 1 | 0 | 0 | | | | | | +-----------------+----------------+------+---------+ | | | | +EmptyResult | | 1 | 0 | 0 | | | | | | +-----------------+----------------+------+---------+ | | | | +Create | (anon_0:Person) | 1 | 1 | 1 | 0/0 | 0.000 | Fused in Pipeline 0 | +-----------------+-----------------+----------------+------+---------+------------------------+-----------+---------------------+ Total database accesses: 1, total allocated memory: 184
Produce Results
ProduceResults
运算符准备结果,使其可供用户使用,例如将内部值转换为用户值。它存在于每个向用户返回数据的查询中,对性能优化影响很小。
PROFILE
MATCH (n)
RETURN n
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+---------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+---------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | n | 35 | 35 | 0 | | | | | | | +---------+----------------+------+---------+----------------+ | | | | +AllNodesScan | n | 35 | 35 | 36 | 120 | 3/0 | 0.508 | Fused in Pipeline 0 | +-----------------+---------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 36, total allocated memory: 184
Load CSV
LoadCSV
运算符将数据从 CSV 源加载到查询中。只要在查询中使用 LOAD CSV 子句,就会使用它。
PROFILE
LOAD CSV FROM 'https://neo4j.ac.cn/docs/cypher-refcard/3.3/csv/artists.csv' AS line
RETURN line
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+---------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+---------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +ProduceResults | line | 10 | 4 | 0 | | 0/0 | 0.210 | | | | +---------+----------------+------+---------+----------------+------------------------+-----------+ | | +LoadCSV | line | 10 | 4 | 0 | 72 | | | In Pipeline 1 | +-----------------+---------+----------------+------+---------+----------------+------------------------+-----------+---------------+ Total database accesses: 0, total allocated memory: 184
Hash joins in general
哈希连接有两个输入:构建输入和探测输入。查询规划器分配这些角色,以便两个输入中较小的一个成为构建输入。构建输入会急切地拉入,并用于构建探测表。完成后,将针对来自探测输入侧的每一行检查探测表。
在查询计划中,构建输入始终是左侧操作数,探测输入是右侧操作数。
有四种哈希连接运算符
Node Hash Join
NodeHashJoin
运算符是 哈希连接 的变体。NodeHashJoin
在节点 ID 上执行哈希连接。由于可以使用基本类型和数组,因此可以非常有效地完成此操作。
PROFILE
MATCH (bob:Person {name: 'Bob'})-[:WORKS_IN]->(loc)<-[:WORKS_IN]-(matt:Person {name: 'Mattias'})
USING JOIN ON loc
RETURN loc.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | `loc.name` | 10 | 0 | 0 | | 0/0 | 0.000 | | | | +----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +Projection | loc.name AS `loc.name` | 10 | 0 | 0 | | 0/0 | 0.000 | | | | +----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +Filter | not anon_0 = anon_1 | 10 | 0 | 0 | | 0/0 | 0.000 | | | | +----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +NodeHashJoin | loc | 10 | 0 | 0 | 3688 | | 0.053 | In Pipeline 2 | | |\ +----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Expand(All) | (matt)-[anon_1:WORKS_IN]->(loc) | 19 | 0 | 0 | | | | | | | | +----------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +NodeIndexSeek | RANGE INDEX matt:Person(name) WHERE name = $autostring_1 | 1 | 0 | 1 | 120 | 1/0 | 0.288 | Fused in Pipeline 1 | | | +----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Expand(All) | (bob)-[anon_0:WORKS_IN]->(loc) | 19 | 1 | 4 | | | | | | | +----------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexSeek | RANGE INDEX bob:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 120 | 3/0 | 0.556 | Fused in Pipeline 0 | +------------------+----------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 7, total allocated memory: 3888
Value Hash Join
ValueHashJoin
运算符是 哈希连接 的变体。此运算符允许使用任意值作为连接键。它最常用于解决以下形式的谓词:n.prop1 = m.prop2
(即两个属性列之间的相等谓词)。
PROFILE
MATCH
(p:Person),
(q:Person)
WHERE p.age = q.age
RETURN p, q
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------+---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------+---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | p, q | 10 | 0 | 0 | | 0/0 | 0.000 | | | | +---------------+----------------+------+---------+----------------+------------------------+-----------+ | | +ValueHashJoin | p.age = q.age| 10 | 0 | 0 | 344 | | | In Pipeline 2 | | |\ +---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +NodeByLabelScan| q:Person | 15 | 0 | 0 | 120 | 0/0 | 0,000 | In Pipeline 1 | | | +---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeByLabelScan | p:Person | 15 | 15 | 16 | 120 | 1/0 | 0,211 | In Pipeline 0 | +-------------------+---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 71, total allocated memory: 664
Node Left/Right Outer Hash Join
NodeLeftOuterHashJoin
和 NodeRightOuterHashJoin
运算符是 哈希连接 的变体。 下面的查询可以使用左外连接或右外连接进行规划。 决策取决于左右两侧的基数;即分别为 (a:Person)
和 (a)-→(b:Person)
返回多少行。 如果 (a:Person)
返回的结果少于 (a)-→(b:Person)
,则计划使用左外连接(由 NodeLeftOuterHashJoin
指示)。 另一方面,如果 (a:Person)
返回的结果多于 (a)-→(b:Person)
,则计划使用右外连接(由 NodeRightOuterHashJoin
指示)。
PROFILE
MATCH (a:Person)
OPTIONAL MATCH (a)-->(b:Person)
USING JOIN ON a
RETURN a.name, b.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------------+------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------------+------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | `a.name`, `b.name` | 14 | 16 | 0 | | 0/0 | 0.102 | | | | +------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +Projection | cache[a.name] AS `a.name`, cache[b.name] AS `b.name` | 14 | 16 | 8 | | 0/0 | 0.055 | | | | +------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +NodeRightOuterHashJoin | a | 14 | 16 | 0 | 4232 | | 0.269 | In Pipeline 2 | | |\ +------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +NodeByLabelScan | a:Person | 15 | 15 | 16 | 120 | 1/0 | 0,049 | In Pipeline 1 | | | +------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +CacheProperties | cache[b.name], cache[a.name] | 13 | 13 | 39 | | | | | | | +------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Expand(All) | (b)<-[anon_0]-(a) | 13 | 13 | 55 | | | | | | | +------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | b:Person | 15 | 15 | 16 | 120 | 5/0 | 1,150 | Fused in Pipeline 0 | +-------------------------+------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 211, total allocated memory: 4312
三元选择
TriadicSelection
运算符用于解决三角形查询,例如非常常见的“查找我的朋友的朋友,他们不是我的朋友”。 它通过将所有朋友放入一个集合中来做到这一点,并使用该集合来检查朋友的朋友是否已经与我连接。 该示例查找所有朋友的朋友的姓名,他们不是我的朋友。
PROFILE
CYPHER runtime=slotted
MATCH (me:Person)-[:FRIENDS_WITH]-()-[:FRIENDS_WITH]-(other)
WHERE NOT (me)-[:FRIENDS_WITH]-(other)
RETURN other.name
Planner COST Runtime SLOTTED Runtime version 5.25 +-------------------+----------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-------------------+----------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | `other.name` | 4 | 24 | 0 | 0/0 | | | +----------------------------------------+----------------+------+---------+------------------------+ | +Projection | other.name AS `other.name` | 4 | 24 | 24 | 1/0 | | | +----------------------------------------+----------------+------+---------+------------------------+ | +Filter | not anon_2 = anon_4 | 16 | 24 | 0 | 0/0 | | | +----------------------------------------+----------------+------+---------+------------------------+ | +TriadicSelection | WHERE NOT (me)--(other) | 4 | 24 | 0 | 0/0 | | |\ +----------------------------------------+----------------+------+---------+------------------------+ | | | +----------------------------------------+----------------+------+---------+------------------------+ | | +Expand(All) | (anon_3)-[anon_4:FRIENDS_WITH]-(other) | 16 | 48 | 98 | 48/0 | | | | +----------------------------------------+----------------+------+---------+------------------------+ | | +Argument | anon_3, anon_2 | 24 | 24 | 0 | 0/0 | | | +----------------------------------------+----------------+------+---------+------------------------+ | +Expand(All) | (me)-[anon_2:FRIENDS_WITH]-(anon_3) | 24 | 24 | 53 | 28/0 | | | +----------------------------------------+----------------+------+---------+------------------------+ | +NodeByLabelScan | me:Person | 15 | 15 | 16 | 1/0 | +-------------------+----------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 246, total allocated memory: 64
三元构建
TriadicBuild
运算符与 TriadicFilter
一起使用来解决三角形查询,例如非常常见的“查找我的朋友的朋友,他们不是我的朋友”。 这两个运算符特定于管道运行时,并且一起执行与 TriadicSelection
对其他运行时所做的相同的逻辑。 TriadicBuild
构建所有朋友的集合,该集合稍后由 TriadicFilter
使用。 该示例查找所有朋友的朋友的姓名,他们不是我的朋友。
PROFILE
CYPHER runtime=pipelined
MATCH (me:Person)-[:FRIENDS_WITH]-()-[:FRIENDS_WITH]-(other)
WHERE NOT (me)-[:FRIENDS_WITH]-(other)
RETURN other.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | `other.name` | 4 | 24 | 0 | | 0/0 | 0.133 | | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +Projection | other.name AS `other.name` | 4 | 24 | 48 | | 2/0 | 0.056 | | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Filter | not anon_2 = anon_4 | 16 | 24 | 0 | | | | | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +TriadicFilter | WHERE NOT (me)--(other) | 4 | 24 | 0 | 4136 | 0/0 | 0.195 | In Pipeline 3 | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Apply | | 16 | 24 | 0 | | 0/0 | | | | |\ +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | | +----------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(All) | (anon_3)-[anon_4:FRIENDS_WITH]-(other) | 16 | 48 | 98 | | | | | | | | +----------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | anon_3, anon_2 | 24 | 24 | 0 | 4200 | 0/0 | 0.397 | Fused in Pipeline 2 | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +TriadicBuild | (me)--(anon_3) | 24 | 24 | 0 | 888 | 0/0 | 1.427 | In Pipeline 1 | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Expand(All) | (me)-[anon_2:FRIENDS_WITH]-(anon_3) | 24 | 24 | 39 | | | | | | | +----------------------------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan| me:Person | 15 | 15 | 16 | 120 | 3/0 | 0,200 | Fused in Pipeline 0 | +-----------------+----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 256, total allocated memory: 7376
三元过滤器
TriadicFilter
运算符与 TriadicBuild
一起使用来解决三角形查询,例如非常常见的“查找我的朋友的朋友,他们不是我的朋友”。 这两个运算符特定于管道运行时,并且一起执行与 TriadicSelection
对其他运行时所做的相同的逻辑。 TriadicFilter
使用 TriadicBuild
之前构建的朋友集合来检查朋友的朋友是否已经与我连接。 该示例查找所有朋友的朋友的姓名,他们不是我的朋友。
PROFILE
CYPHER runtime=pipelined
MATCH (me:Person)-[:FRIENDS_WITH]-()-[:FRIENDS_WITH]-(other)
WHERE NOT (me)-[:FRIENDS_WITH]-(other)
RETURN other.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | `other.name` | 4 | 24 | 0 | | 0/0 | 0.189 | | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +Projection | other.name AS `other.name` | 4 | 24 | 48 | | 2/0 | 0.381 | | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Filter | not anon_2 = anon_4 | 16 | 24 | 0 | | | | | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +TriadicFilter | WHERE NOT (me)--(other) | 4 | 24 | 0 | 4136 | 0/0 | 0.685 | In Pipeline 3 | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Apply | | 16 | 24 | 0 | | 0/0 | | | | |\ +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | | +----------------------------------------+----------------+------+---------+----------------+ | | | | | +Expand(All) | (anon_3)-[anon_4:FRIENDS_WITH]-(other) | 16 | 48 | 98 | | | | | | | | +----------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | anon_3, anon_2 | 24 | 24 | 0 | 4200 | 0/0 | 0.496 | Fused in Pipeline 2 | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +TriadicBuild | (me)--(anon_3) | 24 | 24 | 0 | 888 | 0/0 | 3.268 | In Pipeline 1 | | | +----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Expand(All) | (me)-[anon_2:FRIENDS_WITH]-(anon_3) | 24 | 24 | 39 | | | | | | | +----------------------------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan| me:Person | 15 | 15 | 16 | 120 | 3/0 | 0,481 | Fused in Pipeline 0 | +-----------------+----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 256, total allocated memory: 7376
笛卡尔积
CartesianProduct
运算符生成两个输入的笛卡尔积——来自左子运算符的每一行将与来自右子运算符的所有行组合。 CartesianProduct
通常表现出较差的性能,如果可能,应该避免使用。
PROFILE
MATCH
(p:Person),
(t:Team)
RETURN p, t
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +--------------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | p, t | 140 | 140 | 0 | | 2/0 | 1.917 | | | | +----------+----------------+------+---------+----------------+------------------------+-----------+ | | +CartesianProduct | | 140 | 140 | 0 | 1736 | | 1.209 | In Pipeline 2 | | |\ +----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +NodeByLabelScan | t:Team | 10 | 10 | 11 | 136 | 1/0 | 1,145 | In Pipeline 1 | | | +----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +NodeByLabelScan | p:Person | 15 | 15 | 16 | 120 | 1/0 | 0,409 | In Pipeline 0 | +--------------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 142, total allocated memory: 1816
Foreach
Foreach
运算符在左子运算符和右子运算符之间执行嵌套循环。 与 Apply 运算符类似,它从左侧获取一行,并使用 Argument 运算符将其提供给右侧的运算符树。 Foreach
将产生来自左侧的所有行;来自右侧的所有结果都被拉入并丢弃。
PROFILE
FOREACH (value IN [1,2,3] | CREATE (:Person {age: value}))
Planner COST Runtime SLOTTED Runtime version 5.25 +-----------------+---------------------------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-----------------+---------------------------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | | 1 | 0 | 0 | 0/0 | | | +---------------------------------------------------------+----------------+------+---------+------------------------+ | +EmptyResult | | 1 | 0 | 0 | 0/0 | | | +---------------------------------------------------------+----------------+------+---------+------------------------+ | +Foreach | value IN [1, 2, 3], CREATE (anon_0:Person {age: value}) | 1 | 1 | 9 | 0/0 | +-----------------+---------------------------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 9, total allocated memory: 64
TransactionForeach
TransactionForeach
的工作原理类似于 Foreach
运算符,但将在指定数量的行后提交当前事务。
以下查询使用 变量作用域子句(在 Neo4j 5.23 中引入)将变量导入 CALL 子查询。如果您使用的是较旧版本的 Neo4j,请改为使用 导入 WITH 子句。 |
PROFILE
LOAD CSV FROM 'https://neo4j.ac.cn/docs/cypher-refcard/3.3/csv/artists.csv' AS line
CALL (line) {
CREATE (a: Artist {name: line[0]})
} IN TRANSACTIONS OF 100 ROWS
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 ++---------------------+----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------+----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | | 10 | 0 | 0 | 0 | | | | | | +----+--------------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | 1 | | 10 | 0 | 0 | | 0/0 | 0.000 | Fused in Pipeline 3 | | | +----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +TransactionForeach | 2 | IN TRANSACTIONS OF $autoint_1 ROWS ON ERROR FAIL | 10 | 4 | 0 | 4856 | | | | | |\ +----+--------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Create | 3 | (a:Artist {name: line[$autoint_0]}) | 10 | 4 | 12 | | | | | | | | +----+--------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | 4 | line | 10 | 4 | 0 | 3472 | 0/0 | 0.712 | Fused in Pipeline 2 | | | +----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +LoadCSV | 5 | line | 10 | 4 | 0 | 328 | | | In Pipeline 1 | +---------------------+----+--------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 12, total allocated memory: 5704
SubqueryForeach
SubqueryForeach
的工作原理类似于 Foreach
运算符,但它仅用于执行子查询。
以下查询使用 变量作用域子句(在 Neo4j 5.23 中引入)将变量导入 CALL 子查询。如果您使用的是较旧版本的 Neo4j,请改为使用 导入 WITH 子句。 |
PROFILE
LOAD CSV FROM 'https://neo4j.ac.cn/docs/cypher-refcard/3.3/csv/artists.csv' AS line
CALL (line) {
CREATE (a: Artist {name: line[0]})
}
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+----+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | | 10 | 0 | 0 | 0 | | | | | | +----+-------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | 1 | | 10 | 0 | 0 | | 0/0 | 0.000 | Fused in Pipeline 3 | | | +----+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +SubqueryForeach | 2 | | 10 | 4 | 0 | 4080 | | | | | |\ +----+-------------------------------------+----------------+------+---------+----------------+ | | | | | +Create | 3 | (a:Artist {name: line[$autoint_0]}) | 10 | 4 | 12 | | | | | | | | +----+-------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | 4 | line | 10 | 4 | 0 | 3472 | 0/0 | 0.852 | Fused in Pipeline 2 | | | +----+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +LoadCSV | 5 | line | 10 | 4 | 0 | 328 | | | In Pipeline 1 | +------------------+----+-------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 12, total allocated memory: 4928
Eager
Eager
运算符会导致所有前面的运算符在继续执行之前完全执行整个数据集。 这样做是为了确保查询计划中可能相互影响的部分之间的隔离。
从图中获取的值以延迟方式获取;即模式匹配可能在应用更新之前不会完全耗尽。 为了保持正确的语义,查询规划器将在查询计划中插入 Eager
运算符以防止更新影响模式匹配或其他读取操作。 下面的查询说明了这种情况,其中 DELETE
子句否则会影响 MATCH
子句和 MERGE
子句。 有关 Eager
运算符如何确保正确语义的更多信息,请参阅有关 子句组合 的部分。
在导入数据或迁移图形结构时,Eager
运算符会导致高内存使用率。 在这种情况下,操作应拆分为更简单的步骤;例如,分别导入节点和关系。 或者,可以返回要更新的记录,然后是更新语句。
PROFILE
MATCH (a:Person {name: 'me'}), (b:Person {name: 'Bob'})
DETACH DELETE a, b
MERGE (:Person {name: 'me'})
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------+----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------+----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | | 0 | 0 | 0 | 0 | | | | | | +----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | 1 | | 0 | 0 | 0 | | | | | | | +----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Apply | 2 | | 0 | 1 | 0 | | | | | | |\ +----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +Merge | 3 | CREATE (anon_0:Person {name: $autostring_2}) | 0 | 1 | 3 | | | | | | | | +----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | | +NodeIndexSeek | 4 | RANGE INDEX anon_0:Person(name) WHERE name = $autostring_2 | 0 | 0 | 1 | 3304 | 1/0 | 0.663 | Fused in Pipeline 3 | | | +----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Eager | 5 | read/delete conflict for variable: anon_0 (Operator: 6 vs 4, and 1 more conflicting operators) | 0 | 1 | 0 | 360 | 0/0 | 0.008 | In Pipeline 2 | | | +----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +DetachDelete | 6 | b | 0 | 1 | 4 | | | | | | | +----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +DetachDelete | 7 | a | 0 | 1 | 5 | | | | | | | +----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Eager | 8 | read/delete conflict for variable: b (Operator: 6 vs 10, and 1 more conflicting operators), | 0 | 1 | 0 | 360 | 1/0 | 0.226 | Fused in Pipeline 1 | | | | | read/set conflict for label: Person (Operator: 3 vs 10), | | | | | | | | | | | | read/set conflict for property: name (Operator: 3 vs 10) | | | | | | | | | | +----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +MultiNodeIndexSeek | 9 | RANGE INDEX a:Person(name) WHERE name = $autostring_0, | 0 | 1 | 4 | 376 | 2/0 | 0.218 | In Pipeline 0 | | | | RANGE INDEX b:Person(name) WHERE name = $autostring_1 | | | | | | | | +---------------------+----+------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 17, total allocated memory: 4184
Eager 聚合
EagerAggregation
运算符评估分组表达式并使用结果将行分组到不同的分组中。 对于每个分组,EagerAggregation
然后将评估所有聚合函数并返回结果。 为此,EagerAggregation
如其名称所示,需要从其源中急切地拉入所有数据并建立状态,这会导致系统中的内存压力增加。
PROFILE
MATCH (l:Location)<-[:WORKS_IN]-(p:Person)
RETURN
l.name AS location,
collect(p.name) AS people
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-------------------+----+------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-------------------+----+------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | location, people | 4 | 6 | 0 | | 0/0 | 0.022 | In Pipeline 1 | | | +----+------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +EagerAggregation | 1 | cache[l.name] AS location, collect(p.name) AS people | 4 | 6 | 30 | 2584 | | | | | | +----+------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Filter | 2 | p:Person | 15 | 15 | 30 | | | | | | | +----+------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Expand(All) | 3 | (l)<-[anon_0:WORKS_IN]-(p) | 15 | 15 | 26 | | | | | | | +----+------------------------------------------------------+----------------+------+---------+----------------+ | | | | +CacheProperties | 4 | cache[l.name] | 10 | 10 | 20 | | | | | | | +----+------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | 5 | l:Location | 10 | 10 | 11 | 120 | 4/0 | 0.813 | Fused in Pipeline 0 | +-------------------+----+------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 117, total allocated memory: 2664
有序聚合
OrderedAggregation
运算符是 EagerAggregation
运算符的优化,它利用了传入行的排序。 此运算符使用延迟评估,并且与 EagerAggregation
运算符相比,系统中的内存压力更低。
PROFILE
MATCH (p:Person)
WHERE p.name STARTS WITH 'P'
RETURN p.name, count(*) AS count
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+--------------+---------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+--------------+---------------+ | +ProduceResults | `p.name`, count | 0 | 2 | 0 | | 0/0 | 0.045 | | | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +OrderedAggregation | cache[p.name] AS `p.name`, count(*) AS count | 0 | 2 | 0 | 288 | 0/0 | 0.175 | `p.name` ASC | In Pipeline 1 | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+--------------+---------------+ | +NodeIndexSeekByRange | RANGE INDEX p:Person(name) WHERE name STARTS WITH $autostring_0, cache[p.name] | 0 | 2 | 3 | 120 | 0/1 | 0.529 | p.name ASC | In Pipeline 0 | +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+--------------+---------------+ Total database accesses: 3, total allocated memory: 352
从计数存储中获取节点计数
NodeCountFromCountStore
运算符使用计数存储来回答有关节点计数的问题。 这比 EagerAggregation
运算符快得多,后者通过实际计数来实现相同的结果。 但是,由于计数存储仅存储有限范围的组合,因此 EagerAggregation
仍将用于更复杂的查询。 例如,我们可以获取所有节点的计数以及具有标签的节点的计数,但不能获取具有多个标签的节点的计数。
PROFILE
MATCH (p:Person)
RETURN count(p) AS people
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +--------------------------+------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------------+------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | people | 1 | 1 | 0 | | | | | | | +------------------------------+----------------+------+---------+----------------+ | | | | +NodeCountFromCountStore | count( (:Person) ) AS people | 1 | 1 | 1 | 120 | 0/0 | 0.169 | Fused in Pipeline 0 | +--------------------------+------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 1, total allocated memory: 184
从计数存储中获取关系计数
RelationshipCountFromCountStore
运算符使用计数存储来回答有关关系计数的问题。 这比 EagerAggregation
运算符快得多,后者通过实际计数来实现相同的结果。 但是,由于计数存储仅存储有限范围的组合,因此 EagerAggregation
仍将用于更复杂的查询。 例如,我们可以获取所有关系的计数、具有类型的关系的计数、在一端具有标签的关系的计数,但不能获取两端节点上都有标签的关系的计数。
PROFILE
MATCH (p:Person)-[r:WORKS_IN]->()
RETURN count(r) AS jobs
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +----------------------------------+--------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------------------+--------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | jobs | 1 | 1 | 0 | | | | | | | +--------------------------------------------+----------------+------+---------+----------------+ | | | | +RelationshipCountFromCountStore | count( (:Person)-[:WORKS_IN]->() ) AS jobs | 1 | 1 | 1 | 120 | 0/0 | 0.625 | Fused in Pipeline 0 | +----------------------------------+--------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 1, total allocated memory: 184
Distinct
Distinct
运算符从传入的行流中删除重复行。 为了确保仅返回不同的元素,Distinct
将从其源中延迟地拉入数据并建立状态。 这可能会导致系统中的内存压力增加。
PROFILE
MATCH (l:Location)<-[:WORKS_IN]-(p:Person)
RETURN DISTINCT p
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----+-----------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+----+-----------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | p | 14 | 14 | 28 | | | | | | | +----+-----------------------+----------------+------+---------+----------------+ | | | | +Distinct | 1 | p | 14 | 14 | 0 | 352 | | | | | | +----+-----------------------+----------------+------+---------+----------------+ | | | | +Filter | 2 | p:Person | 15 | 15 | 30 | | | | | | | +----+-----------------------+----------------+------+---------+----------------+ | | | | +Expand(All) | 3 | (l)<-[r:WORKS_IN]-(p) | 15 | 15 | 26 | | | | | | | +----+-----------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | 4 | l:Location | 10 | 10 | 11 | 120 | 4/0 | 0.287 | Fused in Pipeline 0 | +------------------+----+-----------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 95, total allocated memory: 432
有序 Distinct
OrderedDistinct
运算符是 Distinct
运算符的优化,它利用了传入行的排序。 此运算符与 Distinct
运算符相比,系统中的内存压力更低。
PROFILE
MATCH (p:Person)
WHERE p.name STARTS WITH 'P'
RETURN DISTINCT p.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+--------------+---------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+--------------+---------------+ | +ProduceResults | `p.name` | 0 | 2 | 0 | | 0/0 | 0.046 | | | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +OrderedDistinct | cache[p.name] AS `p.name` | 0 | 2 | 0 | 32 | 0/0 | 0.090 | `p.name` ASC | | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+--------------+ | | +NodeIndexSeekByRange | RANGE INDEX p:Person(name) WHERE name STARTS WITH $autostring_0, cache[p.name] | 0 | 2 | 3 | 120 | 0/1 | 0.493 | p.name ASC | In Pipeline 0 | +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+--------------+---------------+ Total database accesses: 3, total allocated memory: 184
Filter
Filter
运算符过滤来自子运算符的每一行,仅将评估谓词为 true
的行传递。
PROFILE
MATCH (p:Person)
WHERE p.name =~ '^a.*'
RETURN p
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | p | 14 | 0 | 0 | | | | | | | +------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Filter | cache[p.name] =~ $autostring_0 | 14 | 0 | 0 | | | | | | | +------------------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexScan | RANGE INDEX p:Person(name) WHERE name IS NOT NULL, cache[p.name] | 14 | 14 | 15 | 120 | 0/1 | 0.763 | Fused in Pipeline 0 | +-----------------+------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 15, total allocated memory: 184
Limit
Limit
运算符从传入的输入中返回前 n
行。
PROFILE
MATCH (p:Person)
RETURN p
LIMIT 3
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | p | 3 | 3 | 0 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +Limit | 3 | 3 | 3 | 0 | 32 | | | | | | +----------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan| p:Person | 3 | 4 | 5 | 120 | 3/0 | 0,540 | Fused in Pipeline 0 | +-----------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 8, total allocated memory: 184
Skip
Skip
运算符从传入的行中跳过 n
行。
PROFILE
MATCH (p:Person)
RETURN p
ORDER BY p.id
SKIP 1
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +------------------+----------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | +ProduceResults | p | 13 | 13 | 0 | | 2/0 | 0.165 | | | | | +----------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +Skip | $autoint_0 | 13 | 13 | 0 | 32 | 0/0 | 0.043 | | | | | +----------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +Sort | `p.id` ASC | 14 | 14 | 0 | 400 | 0/0 | 0.155 | p.id ASC | In Pipeline 1 | | | +----------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | +Projection | p.id AS `p.id` | 14 | 14 | 0 | | | | | | | | +----------------+----------------+------+---------+----------------+ | +------------+ | | +NodeByLabelScan | p:Person | 18 | 18 | 19 | 120 | 3/0 | 0,157 | | Fused in Pipeline 0 | +------------------+----------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ Total database accesses: 71, total allocated memory: 512
Sort
Sort
运算符按提供的键对行进行排序。 为了对数据进行排序,需要从源运算符中急切地拉入所有数据并将其保存在查询状态中,这会导致系统中的内存压力增加。
PROFILE
MATCH (p:Person)
RETURN p
ORDER BY p.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+--------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +------------------+--------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | +ProduceResults | p | 14 | 14 | 0 | | 2/0 | 0.178 | | | | | +--------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +Sort | `p.name` ASC | 14 | 14 | 0 | 1192 | 0/0 | 0.107 | p.name ASC | In Pipeline 1 | | | +--------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | +Projection | p.name AS `p.name` | 14 | 14 | 14 | | | | | | | | +--------------------+----------------+------+---------+----------------+ | +------------+ | | +NodeByLabelScan |p:Person | 14 | 14 | 35 | 120 | 3/0 | 0,221 | | Fused in Pipeline 0 | +------------------+--------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ Total database accesses: 85, total allocated memory: 1272
部分排序
PartialSort
运算符是 Sort
运算符的优化,它利用了传入行的排序。 此运算符使用延迟评估,并且与 Sort
运算符相比,系统中的内存压力更低。 部分排序仅在按多列排序时适用。
PROFILE
MATCH (p:Person)
WHERE p.name STARTS WITH 'P'
RETURN p
ORDER BY p.name, p.age
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ | +ProduceResults | p | 0 | 2 | 0 | | 2/0 | 0.087 | | | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +PartialSort | `p.name` ASC, `p.age` ASC | 0 | 2 | 0 | 544 | 0/0 | 0.184 | p.name ASC, p.age ASC | In Pipeline 1 | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ | +Projection | cache[p.name] AS `p.name`, p.age AS `p.age` | 0 | 2 | 0 | | | | `p.name` ASC | | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+ | +-----------------------+ | | +NodeIndexSeekByRange | RANGE INDEX p:Person(name) WHERE name STARTS WITH $autostring_0, cache[p.name] | 0 | 2 | 3 | 120 | 0/1 | 0.362 | p.name ASC | Fused in Pipeline 0 | +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ Total database accesses: 3, total allocated memory: 608
Top
Top
运算符按提供的键返回排序后的前 n
行。 它不会排序整个输入,而仅保留前 n
行。
PROFILE
MATCH (p:Person)
RETURN p
ORDER BY p.name
LIMIT 2
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +------------------+----------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | +ProduceResults | p | 2 | 2 | 0 | | 2/0 | 0.093 | | | | | +----------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +Top | `p.name` ASC LIMIT 2 | 2 | 2 | 0 | 1184 | 0/0 | 0.295 | p.name ASC | In Pipeline 1 | | | +----------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | +Projection | p.name AS `p.name` | 14 | 14 | 14 | | | | | | | | +----------------------+----------------+------+---------+----------------+ | +------------+ | | +NodeByLabelScan | p:Person | 14 | 14 | 35 | 120 | 3/0 | 0,166 | | Fused in Pipeline 0 | +------------------+----------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ Total database accesses: 85, total allocated memory: 1264
部分 Top
PartialTop
运算符是 Top
运算符的优化,它利用了传入行的排序。 此运算符使用延迟评估,并且与 Top
运算符相比,系统中的内存压力更低。 部分 Top 仅在按多列排序时适用。
PROFILE
MATCH (p:Person)
WHERE p.name STARTS WITH 'P'
RETURN p
ORDER BY p.name, p.age
LIMIT 2
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ | +ProduceResults | p | 0 | 2 | 0 | | 2/0 | 0.093 | | | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +PartialTop | `p.name` ASC, `p.age` ASC LIMIT 2 | 0 | 2 | 0 | 640 | 0/0 | 0.870 | p.name ASC, p.age ASC | In Pipeline 1 | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ | +Projection | cache[p.name] AS `p.name`, p.age AS `p.age` | 0 | 2 | 0 | | | | `p.name` ASC | | | | +--------------------------------------------------------------------------------+----------------+------+---------+----------------+ | +-----------------------+ | | +NodeIndexSeekByRange | RANGE INDEX p:Person(name) WHERE name STARTS WITH $autostring_0, cache[p.name] | 0 | 2 | 3 | 120 | 0/1 | 0.556 | p.name ASC | Fused in Pipeline 0 | +-----------------------+--------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+-----------------------+---------------------+ Total database accesses: 3, total allocated memory: 704
Union
Union
运算符将右子运算符的结果与左子运算符的结果连接起来。
PROFILE
MATCH (p:Location)
RETURN p.name
UNION ALL
MATCH (p:Country)
RETURN p.name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +--------------------+----+--------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------+----+--------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | `p.name` | 20 | 0 | 0 | | | | | | | +----+--------------------+----------------+------+---------+----------------+ | | | | +Union | 1 | | 20 | 0 | 0 | 0 | 0/0 | 0.000 | Fused in Pipeline 2 | | |\ +----+--------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | | +Projection | 2 | `p.name` | 10 | 0 | 0 | | | | | | | | +----+--------------------+----------------+------+---------+----------------+ | | | | | +Projection | 3 | p.name AS `p.name` | 10 | 0 | 0 | | | | | | | | +----+--------------------+----------------+------+---------+----------------+ | | | | | +NodeByLabelScan | 4 | p:Country | 10 | 0 | 0 | 120 | 0/0 | 0.049 | Fused in Pipeline 1 | | | +----+--------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Projection | 5 | `p.name` | 10 | 0 | 0 | | | | | | | +----+--------------------+----------------+------+---------+----------------+ | | | | +Projection | 6 | p.name AS `p.name` | 10 | 0 | 0 | | | | | | | +----+--------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | 7 | p:Location | 10 | 0 | 0 | 120 | 0/0 | 0.077 | Fused in Pipeline 0 | +--------------------+----+--------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 0, total allocated memory: 320
Unwind
Unwind
运算符为列表中的每个项目返回一行。
PROFILE
UNWIND range(1, 5) AS value
RETURN value
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | +ProduceResults | value | 10 | 5 | 0 | | | | | | +----------------------------------------+----------------+------+---------+ | | | | +Unwind | range($autoint_0, $autoint_1) AS value | 10 | 5 | 0 | 0/0 | 0.000 | Fused in Pipeline 0 | +-----------------+----------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ Total database accesses: 0, total allocated memory: 184
分区 Unwind
CYPHER runtime=parallel
PROFILE
UNWIND range(1, 5) AS value
RETURN value
Planner COST Runtime PARALLEL Runtime version 5.25 Batch size 128 +--------------------+----+----------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +--------------------+----+----------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | value | 10 | 5 | 0 | 0/0 | 0.119 | In Pipeline 1 | | | +----+----------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | +PartitionedUnwind | 1 | range($autoint_0, $autoint_1) AS value | 10 | 5 | 0 | | | Fused in Pipeline 0 | +--------------------+----+----------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ Total database accesses: 0
完全限制
ExhaustiveLimit
运算符类似于 Limit
运算符,但它将始终耗尽输入。在组合 LIMIT
和更新时使用。
PROFILE
MATCH (p:Person)
SET p.seen = true
RETURN p
LIMIT 3
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----+---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+----+---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | p | 3 | 3 | 10 | 0 | | | | | | +----+---------------+----------------+------+---------+----------------+ | | | | +ExhaustiveLimit | 1 | 3 | 3 | 3 | 0 | 32 | | | | | | +----+---------------+----------------+------+---------+----------------+ | | | | +SetProperty | 2 | p.seen = true | 17 | 17 | 34 | | | | | | | +----+---------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | 3 | p:Person | 17 | 17 | 18 | 240 | 3/0 | 1.966 | Fused in Pipeline 0 | +------------------+----+---------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 62, total allocated memory: 304
可选
Optional
运算符用于解决某些 OPTIONAL MATCH 查询。它将从其源中提取数据,如果存在任何数据,则简单地将其传递。但是,如果其源未返回任何数据,则 Optional
将生成一个所有列都设置为 null
的单行。
PROFILE
MATCH (p:Person {name: 'me'})
OPTIONAL MATCH (q:Person {name: 'Lulu'})
RETURN p, q
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +ProduceResults | p, q | 1 | 1 | 0 | | 2/0 | 0.079 | In Pipeline 2 | | | +-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +Apply | | 1 | 1 | 0 | | 0/0 | 0.096 | | | |\ +-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | | +Optional | p | 1 | 1 | 0 | 768 | 0/0 | 0.043 | In Pipeline 2 | | | | +-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | | +NodeIndexSeek | RANGE INDEX q:Person(name) WHERE name = $autostring_1 | 1 | 0 | 1 | 2152 | 1/0 | 0.098 | In Pipeline 1 | | | +-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +NodeIndexSeek | RANGE INDEX p:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 120 | 0/1 | 0.364 | In Pipeline 0 | +------------------+-------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ Total database accesses: 3, total allocated memory: 3000
投影端点
ProjectEndpoints
运算符投影关系的起始节点和结束节点。
PROFILE
CREATE (n)-[p:KNOWS]->(m)
WITH p AS r
MATCH (u)-[r]->(v)
RETURN u, v
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------+----+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------+----+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | u, v | 1 | 1 | 2 | 0 | | | | | | +----+-----------------------------------------+----------------+------+---------+----------------+ | | | | +Apply | 1 | | 1 | 1 | 0 | | | | | | |\ +----+-----------------------------------------+----------------+------+---------+----------------+ | | | | | +ProjectEndpoints | 2 | (u)-[r]->(v) | 1 | 1 | 0 | | | | | | | | +----+-----------------------------------------+----------------+------+---------+----------------+ | | | | | +Argument | 3 | r | 1 | 1 | 0 | 4328 | 0/0 | 0.194 | Fused in Pipeline 2 | | | +----+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Eager | 4 | read/create conflict (Operator: 6 vs 2) | 1 | 1 | 0 | 368 | 0/0 | 0.025 | In Pipeline 1 | | | +----+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +Projection | 5 | p AS r | 1 | 1 | 0 | | | | | | | +----+-----------------------------------------+----------------+------+---------+----------------+ | | | | +Create | 6 | (n), (m), (n)-[p:KNOWS]->(m) | 1 | 1 | 3 | | 0/0 | 0.000 | Fused in Pipeline 0 | +---------------------+----+-----------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 5, total allocated memory: 4920
投影
对于每个传入行,Projection
运算符都会评估一组表达式,并生成一个包含表达式结果的行。
PROFILE
RETURN 'hello' AS greeting
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+---------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+---------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | +ProduceResults | greeting | 1 | 1 | 0 | | | | | | +---------------------------+----------------+------+---------+ | | | | +Projection | $autostring_0 AS greeting | 1 | 1 | 0 | 0/0 | 0.000 | Fused in Pipeline 0 | +-----------------+---------------------------+----------------+------+---------+------------------------+-----------+---------------------+ Total database accesses: 0, total allocated memory: 184
最短路径
ShortestPath
运算符在两个先前匹配的节点变量之间查找一个或所有最短路径。此运算符用于 shortestPath()
和 allShortestPaths
函数。
PROFILE
MATCH
(andy:Person {name: 'Andy'}),
(mattias:Person {name: 'Mattias'}),
p = shortestPath((andy)-[*]-(mattias))
RETURN p
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------+-------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------+-------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +ProduceResults | p | 1 | 1 | 0 | | 1/0 | 0.241 | | | | +-------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +ShortestPath | p = (andy)-[anon_0*]-(mattias) | 1 | 1 | 1 | 1424 | | | In Pipeline 1 | | | +-------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +MultiNodeIndexSeek | RANGE INDEX andy:Person(name) WHERE name = $autostring_0, | 1 | 1 | 4 | 120 | 1/1 | 0.308 | In Pipeline 0 | | | RANGE INDEX mattias:Person(name) WHERE name = $autostring_1 | | | | | | | | +---------------------+-------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ Total database accesses: 5, total allocated memory: 1488
StatefulShortestPath(Into)
StatefulShortestPath(Into)
运算符查找从起始节点到单个目标节点的最短路径。它使用双向广度优先搜索 (BFS) 算法,该算法同时执行两次 BFS 调用,一次从左侧边界节点,一次从右侧边界节点。一旦两个 BFS 调用都找到一个节点,这表明它可以从两个边界节点到达,算法将成功终止。如果其中一个 BFS 调用在相交之前耗尽了其搜索,无论是由于无法再到达任何其他节点还是因为已达到最大跳数,那么在边界节点之间不存在有效路径,算法将终止。
PROFILE
MATCH
p = ALL SHORTEST (chris:Person {name: 'Chris'})(()-[]-()-[]-()){1,}(stefan:Person {name: 'Stefan'})
RETURN p
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------------+----+--------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------------+----+--------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +ProduceResults | 0 | p | 2 | 2 | 0 | 0 | 0/0 | 0.039 | | | | +----+--------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +Projection | 1 | (chris) ((anon_12)-[anon_14]-(anon_13)-[anon_11]-())* (stefan) AS p | 2 | 2 | 0 | | 0/0 | 1.365 | | | | +----+--------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +StatefulShortestPath(Into) | 2 | SHORTEST 1 GROUPS (chris) ((`anon_5`)-[`anon_6`]-(`anon_7`)-[`anon_8`]-(`anon_9`)){1, } (stefan) | 2 | 2 | 39 | 22237 | 1/0 | 37.376 | In Pipeline 1 | | | +----+--------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +MultiNodeIndexSeek | 3 | UNIQUE chris:Person(name) WHERE name = $autostring_0, | 1 | 1 | 4 | 376 | 1/1 | 10.245 | In Pipeline 0 | | | | UNIQUE stefan:Person(name) WHERE name = $autostring_1 | | | | | | | | +-----------------------------+----+--------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ Total database accesses: 43, total allocated memory: 22557
StatefulShortestPath(All)
StatefulShortestPath(All)
运算符查找从单个节点到多个目标节点的最短路径。它使用广度优先搜索算法。
PROFILE
MATCH
p = ALL SHORTEST (chris:Person {name:'Chris'})(()-[]-()-[]-()){1,}(location:Location)
RETURN length(p) AS pathLength, location.name AS locationName
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +----------------------------+----+----------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +----------------------------+----+----------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +ProduceResults | 0 | pathLength, locationName | 14 | 20 | 0 | 0 | 0/0 | 0.074 | | | | +----+----------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +Projection | 1 | length((chris) ((anon_12)-[anon_14]-(anon_13)-[anon_11]-())* (location)) AS pathLength, | 14 | 20 | 40 | | 1/0 | 6.828 | | | | | | location.name AS locationName | | | | | | | | | | +----+----------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | +StatefulShortestPath(All) | 2 | SHORTEST 1 GROUPS (chris) ((`anon_5`)-[`anon_6`]-(`anon_7`)-[`anon_8`]-(`anon_9`)){1, } (location) | 14 | 20 | 179 | 37663 | 1/0 | 52.849 | In Pipeline 1 | | | | | expanding from: chris | | | | | | | | | | | | inlined predicates: location:Location | | | | | | | | | | +----+----------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ | +NodeUniqueIndexSeek | 3 | UNIQUE chris:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 376 | 0/1 | 9.078 | In Pipeline 0 | +----------------------------+----+----------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------+ Total database accesses: 221, total allocated memory: 37983
空行
EmptyRow
运算符返回一个没有列的单行。
PROFILE
CYPHER runtime=slotted
FOREACH (value IN [1,2,3] | MERGE (:Person {age: value}))
Planner COST Runtime SLOTTED Runtime version 5.25 +-----------------+--------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +--------------------+--------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | | 1 | 0 | 0 | 0/0 | | | +--------------------------------------+----------------+------+---------+------------------------+ | +EmptyResult | | 1 | 0 | 0 | 0/0 | | | +--------------------------------------+----------------+------+---------+------------------------+ | +Foreach | value IN [1, 2, 3] | 1 | 1 | 0 | 0/0 | | |\ +--------------------------------------+----------------+------+---------+------------------------+ | | +Merge | CREATE (anon_0:Person {age: value}) | 1 | 3 | 9 | 0/0 | | | | +--------------------------------------+----------------+------+---------+------------------------+ | | +Filter | anon_0.age = value | 1 | 0 | 184 | 2/0 | | | | +--------------------------------------+----------------+------+---------+------------------------+ | | +NodeByLabelScan | anon_0:Person | 35 | 108 | 111 | 3/0 | | | +--------------------------------------+----------------+------+---------+------------------------+ | +EmptyRow | | 1 | 1 | 0 | 0/0 | +--------------------+--------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 304, total allocated memory: 64
过程调用
ProcedureCall
运算符表示对过程的调用。
PROFILE
CALL db.labels() YIELD label
RETURN *
ORDER BY label
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Ordered by | Pipeline | +-----------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | +ProduceResults | label | 10 | 4 | 0 | | 0/0 | 0.091 | | | | | +-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+ | | | +Sort | label ASC | 10 | 4 | 0 | 536 | 0/0 | 0.178 | label ASC | In Pipeline 1 | | | +-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ | +ProcedureCall | db.labels() :: (label :: STRING) | 10 | 4 | | | | | | Fused in Pipeline 0 | +-----------------+-----------------------------------+----------------+------+---------+----------------+------------------------+-----------+------------+---------------------+ Total database accesses: ?, total allocated memory: 600
缓存属性
CacheProperties
运算符读取节点和关系属性,并将它们缓存在当前行中。将来访问这些属性可以避免从存储中读取,这将加快查询速度。在下面的计划中,我们将在 Expand(All)
之前缓存 l.name
,因为那里只有几行。
PROFILE
MATCH (l:Location)<-[:WORKS_IN]-(p:Person)
RETURN
l.name AS location,
p.name AS name
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----+-------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+----+-------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | location, name | 13 | 13 | 0 | | | | | | | +----+-------------------------------------------+----------------+------+---------+----------------+ | | | | +Projection | 1 | cache[l.name] AS location, p.name AS name | 13 | 13 | 26 | | | | | | | +----+-------------------------------------------+----------------+------+---------+----------------+ | | | | +Filter | 2 | p:Person | 13 | 13 | 26 | | | | | | | +----+-------------------------------------------+----------------+------+---------+----------------+ | | | | +Expand(All) | 3 | (l)<-[anon_0:WORKS_IN]-(p) | 13 | 13 | 24 | | | | | | | +----+-------------------------------------------+----------------+------+---------+----------------+ | | | | +CacheProperties | 4 | cache[l.name] | 10 | 10 | 20 | | | | | | | +----+-------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | 5 | l:Location | 10 | 10 | 11 | 120 | 4/0 | 0.344 | Fused in Pipeline 0 | +------------------+----+-------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 107, total allocated memory: 200
创建(节点和关系)
Create
运算符用于创建节点和关系。
PROFILE
CREATE
(max:Person {name: 'Max'}),
(chris:Person {name: 'Chris'})
CREATE (max)-[:FRIENDS_WITH]->(chris)
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+---------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+---------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ | +ProduceResults | | 1 | 0 | 0 | | | | | | +---------------------------------------------------------------------------+----------------+------+---------+ | | | | +EmptyResult | | 1 | 0 | 0 | | | | | | +---------------------------------------------------------------------------+----------------+------+---------+ | | | | +Create | (max:Person {name: $autostring_0}), (chris:Person {name: $autostring_1}), | 1 | 1 | 7 | 0/0 | 0.000 | Fused in Pipeline 0 | | | (max)-[anon_0:FRIENDS_WITH]->(chris) | | | | | | | +-----------------+---------------------------------------------------------------------------+----------------+------+---------+------------------------+-----------+---------------------+ Total database accesses: 7, total allocated memory: 184
删除(节点和关系)
Delete
运算符用于删除节点或关系。
PROFILE
MATCH (you:Person {name: 'you'})
DELETE you
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----+--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----+--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | | 0 | 0 | 0 | | | | | | | +----+--------------------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | 1 | | 0 | 0 | 0 | | | | | | | +----+--------------------------------------------------------+----------------+------+---------+----------------+ | | | | +Delete | 2 | you | 0 | 0 | 0 | | | | | | | +----+--------------------------------------------------------+----------------+------+---------+----------------+ | | | | +NodeIndexSeek | 3 | RANGE INDEX you:Person(name) WHERE name = $autostring_0 | 0 | 0 | 1 | 120 | 1/0 | 0.330 | Fused in Pipeline 0 | +-----------------+----+--------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 13, total allocated memory: 216
分离删除
DetachDelete
运算符在所有包含 DETACH DELETE 子句的查询中使用,用于删除节点及其关系。
PROFILE
MATCH (p:Person)
DETACH DELETE p
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +------------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +------------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | | 14 | 0 | 0 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +EmptyResult | | 14 | 0 | 0 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +DetachDelete | p | 14 | 14 | 41 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +NodeByLabelScan | p:Person | 14 | 14 | 35 | 120 | 21/0 | 12,439 | Fused in Pipeline 0 | +------------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 112, total allocated memory: 200
设置标签
SetLabels
运算符用于在节点上设置标签。
PROFILE
MATCH (n)
SET n:Person
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | | 35 | 0 | 0 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +EmptyResult | | 35 | 0 | 0 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +SetLabels | n:Person | 35 | 35 | 22 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +AllNodesScan | n | 35 | 35 | 36 | 120 | 3/0 | 0.873 | Fused in Pipeline 0 | +-----------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 58, total allocated memory: 184
删除标签
RemoveLabels
运算符用于从节点中删除标签。
PROFILE
MATCH (n)
REMOVE n:Person
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | | 35 | 0 | 0 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +EmptyResult | | 35 | 0 | 0 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +RemoveLabels | n:Person | 35 | 35 | 15 | | | | | | | +----------+----------------+------+---------+----------------+ | | | | +AllNodesScan | n | 35 | 35 | 36 | 120 | 3/0 | 0.765 | Fused in Pipeline 0 | +-----------------+----------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 51, total allocated memory: 184
从映射设置节点属性
SetNodePropertiesFromMap
运算符用于在节点上从映射设置属性。
PROFILE
MATCH (n)
SET n = {weekday: 'Monday', meal: 'Lunch'}
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +---------------------------+---------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +---------------------------+---------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | | 35 | 0 | 0 | | | | | | | +---------------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | | 35 | 0 | 0 | | | | | | | +---------------------------------------------------+----------------+------+---------+----------------+ | | | | +SetNodePropertiesFromMap | n = {weekday: $autostring_0, meal: $autostring_1} | 35 | 35 | 105 | | | | | | | +---------------------------------------------------+----------------+------+---------+----------------+ | | | | +AllNodesScan | n | 35 | 35 | 36 | 120 | 5/0 | 3.954 | Fused in Pipeline 0 | +---------------------------+---------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 141, total allocated memory: 184
从映射设置关系属性
SetRelationshipPropertiesFromMap
运算符用于在关系上从映射设置属性。
PROFILE
MATCH (n)-[r]->(m)
SET r = {weight: 5, unit: 'kg'}
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------------------------+-----------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------------------------+-----------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | | 28 | 0 | 0 | | | | | | | +-----------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | | 28 | 0 | 0 | | | | | | | +-----------------------------------------------+----------------+------+---------+----------------+ | | | | +SetRelationshipPropertiesFromMap | r = {weight: $autoint_0, unit: $autostring_1} | 28 | 28 | 84 | | | | | | | +-----------------------------------------------+----------------+------+---------+----------------+ | | | | +DirectedAllRelationshipsScan | (n)-[r]->(m) | 28 | 28 | 28 | 120 | 5/0 | 15.278 | Fused in Pipeline 0 | +-----------------------------------+-----------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 112, total allocated memory: 184
设置属性
SetProperty
运算符用于在节点或关系上设置属性。
PROFILE
MATCH (n)
SET n.checked = true
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | | 35 | 0 | 0 | | | | | | | +------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | | 35 | 0 | 0 | | | | | | | +------------------+----------------+------+---------+----------------+ | | | | +SetProperty | n.checked = true | 35 | 35 | 70 | | | | | | | +------------------+----------------+------+---------+----------------+ | | | | +AllNodesScan | n | 35 | 35 | 36 | 120 | 3/0 | 0.753 | Fused in Pipeline 0 | +-----------------+------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 106, total allocated memory: 184
设置属性
SetProperties
运算符用于在节点或关系上设置多个属性。
PROFILE
MATCH (n)
SET n.weekDay = 'Monday', n.meal = 'Lunch'
Planner COST Runtime PIPELINED Runtime version 5.25 Batch size 128 +-----------------+----+---------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline | +-----------------+----+---------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ | +ProduceResults | 0 | | 35 | 0 | 0 | 0 | | | | | | +----+---------------------------------------------------+----------------+------+---------+----------------+ | | | | +EmptyResult | 1 | | 35 | 0 | 0 | | | | | | | +----+---------------------------------------------------+----------------+------+---------+----------------+ | | | | +SetProperties | 2 | n.weekDay = $autostring_0, n.meal = $autostring_1 | 35 | 35 | 105 | | | | | | | +----+---------------------------------------------------+----------------+------+---------+----------------+ | | | | +AllNodesScan | 3 | n | 35 | 35 | 36 | 248 | 3/0 | 152.289 | Fused in Pipeline 0 | +-----------------+----+---------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+ Total database accesses: 141, total allocated memory: 312
创建约束
CreateConstraint
运算符创建约束。
此约束可以具有任何可用的约束类型。
-
属性唯一性约束
-
属性存在约束 企业版
-
属性类型约束 企业版
-
节点或关系键约束 企业版
以下查询将在具有 Country
标签的节点的 name
属性上创建名称为 uniqueness
的属性唯一性约束。
PROFILE
CREATE CONSTRAINT uniqueness
FOR (c:Country) REQUIRE c.name is UNIQUE
Planner ADMINISTRATION Runtime SCHEMA Runtime version 5.25 +-------------------+------------------------------------------------------------------+ | Operator | Details | +-------------------+------------------------------------------------------------------+ | +CreateConstraint | CONSTRAINT uniqueness FOR (c:Country) REQUIRE (c.name) IS UNIQUE | +-------------------+------------------------------------------------------------------+ Total database accesses: ?
如果存在(约束)则不执行任何操作
为了避免在创建相同的约束时出现错误,我们对约束使用 DoNothingIfExists
运算符。这将确保在特定 CreateConstraint
运算符创建约束之前,不存在具有给定名称的其他约束或具有相同类型和架构的其他约束。如果找到具有给定名称或具有相同类型和架构的约束,它将停止执行,并且不会创建新约束。以下查询将在具有 Country
标签的节点的 name
属性上创建名称为 uniqueness
的属性唯一性约束,前提是在 (:Country {name})
上不存在名为 uniqueness
或属性唯一性约束的其他约束。
PROFILE
CREATE CONSTRAINT uniqueness IF NOT EXISTS
FOR (c:Country) REQUIRE c.name is UNIQUE
Planner ADMINISTRATION Runtime SCHEMA Runtime version 5.25 +--------------------------------+------------------------------------------------------------------+ | Operator | Details | +--------------------------------+------------------------------------------------------------------+ | +CreateConstraint | CONSTRAINT uniqueness FOR (c:Country) REQUIRE (c.name) IS UNIQUE | | | +------------------------------------------------------------------+ | +DoNothingIfExists(CONSTRAINT) | CONSTRAINT uniqueness FOR (c:Country) REQUIRE (c.name) IS UNIQUE | +--------------------------------+------------------------------------------------------------------+ Total database accesses: ?
删除约束
DropConstraint
运算符使用约束的名称删除约束,无论其类型如何。
PROFILE
DROP CONSTRAINT uniqueness IF EXISTS
Planner ADMINISTRATION Runtime SCHEMA Runtime version 5.25 +-----------------+---------------------------------+ | Operator | Details | +-----------------+---------------------------------+ | +DropConstraint | CONSTRAINT uniqueness IF EXISTS | +-----------------+---------------------------------+ Total database accesses: ?
显示约束
ShowConstraints
运算符列出约束。它可能包括对约束类型的过滤,并且可以具有默认输出或完整输出。
PROFILE
SHOW CONSTRAINTS
Planner COST Runtime SLOTTED Runtime version 5.25 +------------------+-------------------------------------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +------------------+-------------------------------------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | id, name, type, entityType, labelsOrTypes, properties, ownedIndex | 10 | 3 | 0 | 0/0 | | | +-------------------------------------------------------------------+----------------+------+---------+------------------------+ | +ShowConstraints | allConstraints, defaultColumns | 10 | 3 | 2 | 0/0 | +------------------+-------------------------------------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 2, total allocated memory: 64
创建索引
CreateIndex
运算符创建索引。
此索引可以是全文索引、点索引、范围索引、文本索引、向量索引或查找索引。
以下查询将在具有 Country
标签的节点的 name
属性上创建名称为 my_index
的索引。
PROFILE
CREATE INDEX my_index
FOR (c:Country) ON (c.name)
Planner ADMINISTRATION Runtime SCHEMA Runtime version 5.25 +--------------+-----------------------------------------------+ | Operator | Details | +--------------+-----------------------------------------------+ | +CreateIndex | RANGE INDEX my_index FOR (:Country) ON (name) | +--------------+-----------------------------------------------+ Total database accesses: ?
如果存在(索引)则不执行任何操作
为了避免在创建相同的索引时出现错误,我们对索引使用 DoNothingIfExists
运算符。这将确保在 CreateIndex
运算符创建索引之前,不存在具有给定名称或架构的其他索引。如果找到具有给定名称或架构的索引,它将停止执行,并且不会创建新索引。以下查询将在具有 KNOWS
关系类型的关系的 since
属性上创建名称为 my_index
的索引,前提是不存在此类索引。
PROFILE
CREATE INDEX my_index IF NOT EXISTS
FOR ()-[k:KNOWS]-() ON (k.since)
Planner ADMINISTRATION Runtime SCHEMA Runtime version 5.25 +---------------------------+----------------------------------------------------+ | Operator | Details | +---------------------------+----------------------------------------------------+ | +CreateIndex | RANGE INDEX my_index FOR ()-[:KNOWS]-() ON (since) | | | +----------------------------------------------------+ | +DoNothingIfExists(INDEX) | RANGE INDEX my_index FOR ()-[:KNOWS]-() ON (since) | +---------------------------+----------------------------------------------------+ Total database accesses: ?
删除索引
DropIndex
运算符使用索引的名称删除索引。
PROFILE
DROP INDEX my_index
Planner ADMINISTRATION Runtime SCHEMA Runtime version 5.25 +------------+---------------+ | Operator | Details | +------------+---------------+ | +DropIndex | INDEX my_index| +------------+---------------+ Total database accesses: ?
显示索引
ShowIndexes
运算符列出索引。它可能包括对索引类型的过滤,并且可以具有默认输出或完整输出。
PROFILE
SHOW INDEXES
Planner COST Runtime SLOTTED Runtime version 5.25 +-----------------+-------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-----------------+-------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | id, name, state, populationPercent, type, entityType, labelsOrTypes, properties, indexProvider, | 10 | 9 | 0 | 0/0 | | | | owningConstraint | | | | | | | +-------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | +ShowIndexes | allIndexes, defaultColumns | 10 | 9 | 2 | 0/0 | +-----------------+-------------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 2, total allocated memory: 64
显示函数
ShowFunctions
运算符列出函数。它可能包括对内置函数与用户定义函数的过滤,以及给定用户是否可以执行该函数的过滤。输出可以是默认输出或完整输出。
PROFILE
SHOW FUNCTIONS
Planner COST Runtime SLOTTED Runtime version 5.25 +-----------------+-----------------------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-----------------+-----------------------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | name, category, description | 10 | 147 | 0 | 0/0 | | | +-----------------------------------------------------+----------------+------+---------+------------------------+ | +ShowFunctions | allFunctions, functionsForUser(all), defaultColumns | 10 | 147 | 0 | 0/0 | +-----------------+-----------------------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 0, total allocated memory: 64
显示过程
ShowProcedures
运算符列出过程。它可能包括对给定用户是否可以执行该过程的过滤,并且可以具有默认输出或完整输出。
PROFILE
SHOW PROCEDURES
Planner COST Runtime SLOTTED Runtime version 5.25 +-----------------+----------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-----------------+----------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | name, description, mode, worksOnSystem | 10 | 55 | 0 | 0/0 | | | +----------------------------------------+----------------+------+---------+------------------------+ | +ShowProcedures | proceduresForUser(all), defaultColumns | 10 | 55 | 0 | 0/0 | +-----------------+----------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 0, total allocated memory: 64
显示设置
ShowSettings
运算符列出配置设置。
PROFILE
SHOW SETTINGS
Planner COST Runtime SLOTTED Runtime version 5.25 +-----------------+---------------------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-----------------+---------------------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | name, value, isDynamic, defaultValue, description | 10 | 264 | 0 | 0/0 | | | +---------------------------------------------------+----------------+------+---------+------------------------+ | +ShowSettings | allSettings, defaultColumns | 10 | 264 | 0 | 0/0 | +-----------------+---------------------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 0, total allocated memory: 64
显示事务
ShowTransactions
运算符列出事务。它可能包括对给定 ID 的过滤,并且可以具有默认输出或完整输出。
PROFILE
SHOW TRANSACTIONS
Planner COST Runtime SLOTTED Runtime version 5.25 +-------------------+-----------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +-------------------+-----------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | database, transactionId, currentQueryId, connectionId, clientAddress, username, currentQuery, | 10 | 1 | 0 | 0/0 | | | | startTime, status, elapsedTime | | | | | | | +-----------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ | +ShowTransactions | defaultColumns, allTransactions | 10 | 1 | 0 | 0/0 | +-------------------+-----------------------------------------------------------------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 0, total allocated memory: 64
终止事务
TerminateTransactions
运算符按 ID 终止事务。
PROFILE
TERMINATE TRANSACTIONS 'database-transaction-123'
Planner COST Runtime SLOTTED Runtime version 5.25 +------------------------+--------------------------------------------------------+----------------+------+---------+------------------------+ | Operator | Details | Estimated Rows | Rows | DB Hits | Page Cache Hits/Misses | +------------------------+--------------------------------------------------------+----------------+------+---------+------------------------+ | +ProduceResults | transactionId, username, message | 10 | 1 | 0 | 0/0 | | | +--------------------------------------------------------+----------------+------+---------+------------------------+ | +TerminateTransactions | defaultColumns, transactions(database-transaction-123) | 10 | 1 | 0 | 0/0 | +------------------------+--------------------------------------------------------+----------------+------+---------+------------------------+ Total database accesses: 0, total allocated memory: 64