首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >String.equals的效率或neo4j中的起始

String.equals的效率或neo4j中的起始
EN

Stack Overflow用户
提问于 2022-02-23 02:34:19
回答 1查看 60关注 0票数 0

假设我的应用程序场景如下:

JOJO家族的每个成员都是以他的祖先的名字命名的。第一代叫乔纳森,所以乔纳森的直系后裔叫做JonathanJoseph和JonathanGiorno。等等,我们得到了JonathanJosephJotaro,JonathanJosephJosuke,JonathanJosephJotaroJolyne。

代码语言:javascript
复制
(Jonathan)-[:AncestorOf]->(JonathanJoseph)
(Jonathan)-[:AncestorOf]->(JonathanGiorno)
(JonathanJoseph)-[:AncestorOf]->(JonathanJosephJotaro)
(JonathanJoseph)-[:AncestorOf]->(JonathanJosephJosuke)
(JonathanJosephJotaro)-[:AncestorOf]->(JonathanJosephJotaroJolyne)

JOJO家族继承了一代又一代的黄金精神,所以每个人都有一种特殊的能力,叫做“站立力”。但是,我们只关心叶节点(没有后代)上的JOJO的“站立能力”。

代码语言:javascript
复制
(JonathanGiorno)-[:Owns]->(Gold Experience)
(JonathanJosephJosuke)-[:Owns]->(Crazy Diamond)
(JonathanJosephJotaroJolyne)-[:Owns]->(Stone Free)

问题是:

  • ,我想写一些查询,以获取某个家庭拥有的所有“站立权力”的名称。我想出两种解决方案:(:JOJO{name:"Jonathan"})-:AncestorOf*-(:JOJO)-:Owns->(sp:StandPower)
  • 存储所有祖先节点,使用String.equals获取匹配的祖先节点,然后跳到叶节点匹配的返回sp

代码语言:javascript
复制
- Not store any ancestor nodes, use START WITH to get the matched leaf nodes MATCH (j:JOJO)-[:Owns]->(sp:StandPower) WHERE j.name STARTS WITH "Jonathan" return sp

哪种解决方案更好?

  • In Java、String.equals和String.startsWith具有几乎相同的时间复杂度O(n)。那么,neo4j?

的情况仍然是这样吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-23 13:31:05

根据索引偏好的这一链接:

https://neo4j.com/docs/cypher-manual/current/query-tuning/indexes/#_index_preference

引用:

  • 文本索引优于BTREE索引,用于包含和结尾。在所有其他情况下,
  • BTREE索引优于文本索引。

恩古特:

因此,在您的例子中,我将使用

代码语言:javascript
复制
MATCH (:JOJO{name:"Jonathan"})-[:AncestorOf*]-(:JOJO)-[:Owns]->(sp:StandPower)
return sp

通常,由于字符串匹配已经在使用索引,所以执行字符串匹配将从执行开始。如果您执行查询计划来查看如何使用索引的详细信息,那么情况要好得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71230702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档