簡體   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