2014-04-30 99 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