繁体   English   中英

检查两个节点是否在恒定时间内有关系

[英]Check if two nodes have a relationship in constant time

目前,我在带有标签“ d:ReferenceEntity”的节点上具有唯一索引。 该查询运行大约需要11秒钟,返回7行。 授予的T1有大约40万个关系。

考虑到我们可以建立所有连接到T1的节点的Map,因此我不知道为什么会花这么长时间,因此可以提供恒定的时间。

我是否缺少Neo4j可以提供的其他一些索引功能? 而且我的整个数据集都在内存中,因此它不应该存入磁盘。

match(n:ReferenceEntity {entityId : "T1" })-[r:HAS_REL]-(d:ReferenceEntity) WHERE d.entityId in ["T2", "T3", "T4"] return n


:schema
 Indexes
  ON :ReferenceEntity(entityId) ONLINE (for uniqueness constraint) 

 Constraints
  ON (referenceentity:ReferenceEntity) ASSERT referenceentity.entityId IS UNIQUE

说明计划:

解释计划

  1. 您已使用EXPLAIN而不是PROFILE来获取该查询计划,因此它显示了误导的估计行数。 如果使用过PROFILE ,那么Expand(All)操作实际上将有大约40万行,因为该操作实际上将遍历每个关系。 这就是为什么您的查询需要这么长时间的原因。

  2. 您可以尝试执行此查询,该查询告诉Cypher使用dn上的索引。 (在我的机器上,我必须两次使用USING INDEX子句才能获得所需的结果。)使用PROFILE调整Cypher代码肯定是值得的。

     MATCH (n:ReferenceEntity { entityId : "T1" }) USING INDEX n:ReferenceEntity(entityId) MATCH n-[r:HAS_REL]-(d:ReferenceEntity) USING INDEX d:ReferenceEntity(entityId) WHERE d.entityId IN ["T2", "T3", "T4"] RETURN n, d; 

    这是配置文件计划(在我的数据库中,我有2个满足WHERE测试的关系):

轮廓图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM