2014-04-25 98 views
1

我有一個包含5M節點和10M關係的圖形數據庫。 我正在使用4GB RAM的Macbook Pro。我已經嘗試調整java堆大小和neo4j內存而沒有成功。Neo4J/Cypher查詢速度很慢,按屬性排序

我的問題是,我有這樣的一個簡單的暗號查詢:

MATCH (pet:Pet {id:52163})-[r:FOLLOWS]->(friend) 
MATCH (friend)-[r:POSTED]->(n) 
RETURN friend.id, TYPE(r),LABELS(n),n.id 
LIMIT 30; 

此查詢需要100毫秒,這是令人印象深刻。但是,當我增加一個「ORDER BY」這個查詢需要很長的時間=> 787-8:/

MATCH (pet:Pet {id:52163})-[r:FOLLOWS]->(friend) 
MATCH (friend)-[r:POSTED]->(n) 
RETURN friend.id, TYPE(r),LABELS(n),n.id 
ORDER BY r.date DESC 
LIMIT 30; 

是否有人有想法?

回答

0

您可能需要考慮relationship indexes以加快查詢速度。日期屬性可以用這種方式索引。您正在使用ORDER BY關鍵字,因爲它需要迭代整個結果集以執行排序,所以幾乎總是會使查詢速度變慢。

也可以考慮使用一個MATCH聲明是否適合您的需要:

MATCH (pet:Pet {id:52163})-[r:FOLLOWS]->(friend)-[r:POSTED]->(n) 
+0

感謝您的回答! 我用Michael Hunger的批量導入器重新導入了我的數據庫,並在'date'屬性中使用了node_auto_index和relationship_auto_index。 一切似乎都可以與這些索引,與日期屬性的所有關係進行索引。 但查詢仍然太長...沒有任何改變 – Fcc

0

謝謝您的回答!

我使用Michael Hunger的批量導入程序重新導入了我的數據庫,並在date屬性上使用node_auto_index和relationship_auto_index。

一切似乎都與這些索引一致,與日期屬性的所有關係都被索引。

但是查詢仍然太長...沒有任何變化