如何优化这个 Neo4j 查询

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

我写了这个密码查询:

MATCH (SubjectUserNode:User:Transaction {NodeID: "2547:12109:000:381864"})-[dimensionRelation:LegalEntity
    WHERE dimensionRelation.Status = "1"
]->(dimension:LegalEntity:Transaction)<-[udimensionRelation:LegalEntity
    WHERE udimensionRelation.Status = "1"
]-(User:User:Transaction)-[RoleRelationship:Role
    WHERE RoleRelationship.Status = "1"
]->(Role:Role:Transaction {NodeID: "2547:12122:000:70163"})
RETURN User.TransactionID as UserID

在此查询中,我试图获取与给定角色节点(给定的 NodeID)相关的所有用户节点,并且还与与给定用户节点(给定的 NodeID)相关的 LegalEntity 节点相关。

示例:

查询资料为:

查询需要 4-5 秒返回数据,返回的节点数量约为 150 个。

有没有办法像使用任何 apoc 过程一样改进这个查询?我想不出任何其他方法,因为根据我的说法,这本身就是一个简单的查询。此外,已经在每个节点类型的 nodeID 上创建了索引。

neo4j cypher
1个回答
0
投票

您的查询似乎花费了大部分时间扫描所有可能的

SubjectUserNode
候选者。

因此,尝试在

User.NodeID
上添加索引。执行计划器应该能够使用它来删除大量的 DB hts。

此外,除非逻辑上需要,否则您应该简化查询以删除不必要的过滤,这会浪费时间。例如,如果所有

User
节点也是
Transaction
节点,则使用
(SubjectUserNode:User ...)
而不是
(SubjectUserNode:User:Transaction ...)

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