シンプルなサイファークエリがあり、完了までに時間がかかりすぎます。Neo4j cypherクエリーが長すぎます
ノードタイプ
人{PERSONID、PersonEmailAddress}
文献{文書ID}
関係タイプ: SENT、TO、CC、BCC
コンセプトは:
(P:人) - [:SENT] - >(D:ドキュメント) - [:TO | CC | BCC] - >(anotherPerson:人)
私はそれらの人いずれかをするを取得しようとしています与えられた人が最大のメールを送りました。
たとえば、Person#1がPerson#77とPerson#615に最大メール(6メール)を送信したことを次の図に示します。そこでここでは、その人に送信されたメール数の上位5人のIDを(下の表に示すように)欲しいと思います。
+------------+-----------------------+
| ReceiverId | NumberOfMailsReceived |
+------------+-----------------------+
| 77 | 6 |
| 615 | 6 |
| 101 | 4 |
| 247 | 4 |
| 252 | 4 |
+------------+-----------------------+
私は、次のクエリをしようとしている:
MATCH(p:Person{PersonId:1})-->(d) WITH DISTINCT d
MATCH (d)-->(rc)
RETURN rc, COUNT(rc) as c ORDER BY c DESC LIMIT 5
のみだけで9人#1が送信した文書とがあるのでここでは何のパフォーマンス上の問題は、このクエリではありません15人がこの9文書のレシーバーとして参加しています。
しかし、私は合計にほぼ56,500の文書を送信した、との合計869(明確な)人がレシーバとして関与している別の人のために同じクエリを発射した場合、クエリは
Cypher version: CYPHER 3.1, planner: COST, runtime: INTERPRETED. 21570218 total db hits in 43261 ms.
完了するまでに43261ミリ秒かかります5.16ジブ下のデータベース SE:PROFILEは私のNeo4jのブラウザはサイズを示し
以下の通りですction。
dbms.memory.heap.initial_size=8G
dbms.memory.heap.max_size=8G
dbms.memory.pagecache.size=4g
任意の提案やアイデアを、クエリを最適化するために:
これは私が使用しているコンフィグですか?
ありがとうございます。
EDIT
3.2に3.1.1からのNeo4jのバージョンを更新した後、クエリがまだ約ミリ秒かかります。