Neo4j 多标签模式和查询性能

问题描述 投票:0回答:1

假设我有一个具有已定义 ID 的决策基础节点:

@NodeEntity
public class Decision {

    @Id
    @Index(unique = true)
    private Long id;

}

我定义了一个

UNIQUE INDEX on Decision.id

此外,我还有两个来自决策的节点:

@NodeEntity
public class Profile extends Decision {
}

@NodeEntity
public class Notification extends Decision{
}

让我们考虑一个场景,其中我的数据库中有

1000 Profiles
1 billion Notifications
。通过 Cypher 查询查询配置文件是否会受到 10 亿个通知节点的存在的显着影响,因为它们共享相同的公共标签“决策”?

我是否还应该在“Profile.id”和“Notification.id”上添加一个唯一索引,即使它们继承自“Decision”节点?

neo4j cypher query-optimization
1个回答
0
投票

唯一性约束创建 RANGE 索引。 RANGE索引内部使用B+树算法,其复杂度为O(log n)。

1K 的

log2
约为 10,1G 的
log2
约为 30。由您决定因子 3 是否足够重要以保证创建另一个索引。仅为 1K 节点创建额外索引不会占用太多存储空间,因此不必担心。您可能想尝试一下,看看是否值得。

© www.soinside.com 2019 - 2024. All rights reserved.