2017-02-04 3 views
0

neo4jバージョン3.0.3を使用しています。私は100 000のデータに対して以下のクエリを実行しました。実行に1分以上かかります。どのように実行時間を短縮するには?別のアプローチを追加カーンプルやハイデラバードNeo4jがクエリーを完了するのに1分以上かかります

MATCH (d:Consumer)-[:HAS_VISITED_LOCATION]->(l:Location) 
WHERE (l.AreaName<>"hyderabad" AND l.AreaName<>"kanpur") 
RETURN COUNT(d.MID) 
+0

':Location(AreaName)'にインデックスを作成していますか? –

+0

まだ作成されていません –

+1

作成してください。その結果について教えてください。 –

答えて

-1

すべての消費者。あなたはただの数だけを求めているので、どちらかの場所を訪問していない消費者は、その場所の人数を得ることができ、それを消費者の総数から差し引くことができます。

MATCH (c:Consumer) 
WITH COUNT(c) as consumerCnt 
MATCH (c:Consumer)-[:HAS_VISITED_LOCATION]->(l:Location) 
WHERE l.AreaName="hyderabad" OR l.AreaName="kanpur" 
RETURN COUNT(DISTINCT c) - consumerCnt as count 

編集されているので、最初にすべての顧客の数を取得します。 Neo4jは、クエリを実行するときにNodeCountFromStore操作を適用するときにちょっと厄介なので、これを最初に配置すると、パフォーマンスが悪い別の手段を選択するのではなく、このアプローチが保証されます。

+0

それは、HAS_VISITED_LOCATION関係を持つユーザーのために働いていますが、HAS_VISITED_LOCATION関係も持た​​ないユーザーの数も欲しいと思います。 [:HAS_VISITED_LOCATION] - - >(L:場所) (l.AreaName <> "ハイデラバード" AND l.AreaName <> "カンプール") : –

+0

この オプションMATCH(消費者D)のようなオプションのキーワードを追加してみてください戻り値(d.MID) –

+0

このクエリは、ハイデラバードやカンパールなどの場所を訪れた消費者には適用されません。例えば、カンプールを訪れ、チェンナイを訪れた消費者。この試合は、消費者と彼らが訪れたすべての場所を考慮する。 kanpurの行は除外されます。しかし、同じ消費者と並行した列が残されます。場所は、チェンナイの場所に拘束されます。 – InverseFalcon

0

を訪れたことがありません

MATCH (c:Consumer)-[:HAS_VISITED_LOCATION]-(l:Location) 
WHERE l.AreaName="hyderabad" OR l.AreaName="kanpur" 
WITH l 
MATCH(d:Consumer) 
WHERE NOT (d)-[:HAS_VISITED_LOCATION]-(l) 
RETURN COUNT(DISTINCT d.MID) 
関連する問題