Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 检查两个节点在恒定时间内是否存在关系_Neo4j - Fatal编程技术网

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

Neo4j 检查两个节点在恒定时间内是否存在关系,neo4j,Neo4j,目前,我在节点上有一个唯一的索引,标签为“d:ReferenceEntity”。运行此查询大约需要11秒,返回7行。T1拥有大约400000个关系 考虑到我们可以构建一个所有连接节点到T1的映射,从而提供恒定的时间,我不确定为什么这会花费太长的时间 我是否遗漏了Neo4j可以提供的其他索引功能?另外,我的整个数据集都在内存中,所以它不应该有任何与磁盘相关的内容 match(n:ReferenceEntity {entityId : "T1" })-[r:HAS_REL]-(d:Reference

目前,我在节点上有一个唯一的索引,标签为“d:ReferenceEntity”。运行此查询大约需要11秒,返回7行。T1拥有大约400000个关系

考虑到我们可以构建一个所有连接节点到T1的映射,从而提供恒定的时间,我不确定为什么这会花费太长的时间

我是否遗漏了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
解释计划:

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

  • 您可以尝试此查询,它告诉Cypher在
    d
    n
    上使用索引。(在我的机器上,我不得不两次使用
    usingindex
    子句来获得所需的结果。)使用
    PROFILE
    来调优密码显然是值得的

    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;
    
    下面是概要计划(在我的数据库中,我有两个关系满足
    WHERE
    测试):


  • 谢谢你,这样做了,明确地告诉它要使用哪些索引,从11秒减少到78毫秒。很高兴为你提供帮助。请记住接受你问题的最佳答案。