2014-04-30 61 views
0

任何人都可以请让我知道什么是错的这个查询Neo4j的暗号查询需要大量的时间

MATCH(I1:接口),(I2:接口),其中I1.IfIPAddress =“172.16.42.9” AND I2.IfIPAddress ='172.16.42.10'WITH COUN(I1)+ Count(I2)AS iCount,I1,I2 WHERE iCount = 2
return iCount;

其中有5000个接口节点。 为什么执行查询需要很长时间,但仍然不能执行?

+0

就明白了:你正在寻找那些两个接口,具有特定的IP地址,并且只有在任何接口有1个或2个发行版(如果两个接口都有,否则只有2个接口)的情况下返回结果。这样对吗? – MarcoL

+0

是的。我希望这两个接口在创建链接之前都存在,这就是查询的第一部分所做的。如果两者都存在并且没有重复我会计数将返回2. – Nipun

回答

1

如果你只是想测试是否存在两个接口的情况下,你可以这样做:

MATCH (i1:Interface {IfIPAddress:'172.16.42.9'}), (i2:Interface {IfIPAddress:'172.16.42.10'}) 
RETURN i1, i2; 

如果同时存在,那么单行(与I1和I2节点)将被退回,否则将返回0行。另外,为了加速这些查询,您应该创建索引或唯一性约束(如果没有两个接口节点可以具有相同的IfIPAddress值)。

创建索引:

CREATE INDEX ON :Interface(IfIPAddress); 

要创建唯一性约束,而不是(也自动为您创建上述指数):

CREATE CONSTRAINT ON (i:Interface) 
    ASSERT i.IfIPAddress IS UNIQUE; 
+0

您可以让我知道两个匹配语句之间的区别是什么以及neo4j如何处理这两个匹配 – Nipun

+0

您的原始查询执行相同的匹配,比赛数量。计数不是必需的。 – cybersam

+0

@Nipun我回答了你的问题吗? – cybersam