我写了这个密码查询:
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 上创建了索引。
您的查询似乎花费了大部分时间扫描所有可能的
SubjectUserNode
候选者。
因此,尝试在
User.NodeID
上添加索引。执行计划器应该能够使用它来删除大量的 DB hts。
此外,除非逻辑上需要,否则您应该简化查询以删除不必要的过滤,这会浪费时间。例如,如果所有
User
节点也是 Transaction
节点,则使用 (SubjectUserNode:User ...)
而不是 (SubjectUserNode:User:Transaction ...)