2016-12-06 12 views
1

誰かが私にこれを説明してもらえ:のNeo4j大規模なデータベース上の単純なクエリ

Neo4j websiteで、それは私が大規模なデータベース(200万ノード)上でこれを行うところが

を検索するときにノードラベルを使用することをお勧めします:

MATCH p = (n:Foo)-[r:Bar]->(m:Foo)<-[s:Bar]-(o:Foo) RETURN p LIMIT 1 

これは、金額のオブジェクトを比較する恐ろしい幅広い最初の検索をもたらし、関数は決して返されません。

BFS

一方、ラベルのない同等未満秒で完了します。

MATCH p = (n)-[r:Bar]->(m)<-[s:Bar]-(o) RETURN p LIMIT 1 

DFS

検索の同じ種類を行うラベル付きバージョンを作成する方法はありますか?

+0

neo4jのどのバージョンをお使いですか? – cybersam

+0

あなたは単方向の関係を指定しようとしましたか? – RustyB

+0

はい、これを説明に入れました。バージョン3.0.7 –

答えて

1

これはデータによって異なりますが、そのクエリを部分的に分解して最終結果に向けて試すことができます。

MATCH (m:Foo) 
WHERE SIZE((m)<-[:Bar]-(:Foo)) > 1 
WITH m LIMIT 1 
MATCH p = (n:Foo)-[r:Bar]->(m)<-[s:Bar]-(o:Foo) 
RETURN p LIMIT 1 

我々は、中心から開始した場合プランナは違ったクエリを実行します場合にもチェックする価値があるかもしれ:フー・パターン内のノードではなく、それが今やっているものを、可能なすべてのエンド・ノードから拡大しています次にハッシュ結合を実行して中間のノードを見つけます。

MATCH (m:Foo) 
WITH m 
MATCH p = (n:Foo)-[r:Bar]->(m)<-[s:Bar]-(o:Foo) 
RETURN p LIMIT 1 
+0

優れています。最初の提案が頭の爪に当たっています(秒は遅いハッシュ結合を与えます。 –

関連する問題