赞
踩
NodeByIdSeek
和 NodeIndexSeek
是 Neo4j 中常见的两种节点查找操作,它们的效率主要取决于查询的具体场景和节点的数量。以下是它们的效率对比和适用场景:
NodeByIdSeek
NodeByIdSeek
是通过节点的内部 ID 查找节点的操作。这种查找方式非常高效,因为 Neo4j 使用内部 ID 进行直接寻址。NodeByIdSeek
是最佳选择。NodeByIdSeek
的时间复杂度为 O(1),是最为高效的查找方式。NodeIndexSeek
NodeIndexSeek
是通过指定的索引查找节点的操作。这个操作会根据索引字段的值查找节点。NodeIndexSeek
是合适的选择。查询速度:
NodeByIdSeek
通常比 NodeIndexSeek
更快,因为它是通过内部 ID 直接访问节点,几乎是即时的。NodeIndexSeek
依赖于索引结构,虽然也很快,但通常会稍微慢一些,因为需要通过索引进行查找。适用范围:
NodeByIdSeek
仅适用于已经知道节点内部 ID 的场景。NodeIndexSeek
适用于根据节点属性值进行查找的场景。索引的建立和维护:
NodeByIdSeek
不需要额外的索引建立和维护。NodeIndexSeek
需要在节点属性上建立索引,这会增加一定的存储和维护成本,但能够显著提升基于属性值的查询性能。假设我们有一个包含大量用户节点的图数据库:
NodeByIdSeek
示例:
- MATCH (n)
- WHERE id(n) = 12345
- RETURN n
这里的 id(n)
是节点的内部 ID,查询速度非常快。
NodeIndexSeek
示例:
CREATE INDEX ON :User(username)
建立索引后,可以进行如下查询:
- MATCH (n:User {username: 'john_doe'})
- RETURN n
这种查询会利用在 username
属性上的索引,提高查询效率。
NodeByIdSeek
:
NodeIndexSeek
:
NodeByIdSeek
慢根据具体的查询需求选择合适的查找方式,可以在性能和灵活性之间取得平衡。
看执行计划
NodeByIdSeek
- PROFILE
- MATCH (n)
- WHERE id(n) = 0
- RETURN n
- Planner COST
-
- Runtime PIPELINED
-
- Runtime version 5.21
-
- 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
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
NodeIndexSeek
- PROFILE
- MATCH (location:Location {name: 'Malmo'})
- RETURN location
- Planner COST
-
- Runtime PIPELINED
-
- Runtime version 5.21
-
- 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
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
怎么感觉NodeIndexSeek更快呢hhh...欢迎大佬留名
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。