2016-08-31 18 views
0

あなたのLIMITはどれくらい高いか、実行計画中にDbHitsがどれだけ高くなるか、neo4jは "allShortestPaths"クエリ。LOMITがneo4jの "allShortestPaths"のcypherクエリのパフォーマンスに与える影響

私の最初の質問は用量LIMITでもneo4j "allShortestPaths"クエリに影響します。影響を与えるかどうか、影響を与える理由は何ですか?私は、我々は

を期待どおりLIMITがパフォーマンスに影響を与えることは明白な証拠を発見していないいくつかのtest.butを行う必要があり

[EDITED]

私のテストクエリ:

MATCH 
    (node1:E { eid:"c953fc2d-55fc-4239-910e-ae6e41b3648d" }), 
    (node2:E { eid:"e8cdf5e0-97ad-4e1e-a8e4-29358f8a9866" }), 
    p = allShortestPaths((node1)-[*]-(node2)) 
RETURN p 
LIMIT 25; 
+0

テストクエリの一部を共有できますか?特に 'WITH'と組み合わせると、Cypherクエリの_lot_の場所に' LIMIT'を置くことができます。 –

+0

OK、私のテストクエリは以下の通りです: MATCH(node1:E {eid: "c953fc2d-55fc-4239-910e-ae6e41b3648d"})、(node2:E {eid: "e8cdf5e0-97ad-4e1e-a8e4-29358f8a9866 "})、p = allShortestPaths((node1) - [*] - (node2)) RETURN p LIMIT 25 私のクエリはちょうど最短経路を見つけることです。 – Leeon

答えて

2

あなたのテストクエリのLIMITは、作業の量をallShortestPathsで制限しません。代わりに、戻ってくる結果の数を制限するだけです。

allShortestPathsによって行われる作業量に影響を与える唯一の方法は、検索されたパスの長さに上限を設定することです。たとえば、次のクエリは、最大5つの関係でパスを検索します:

MATCH 
    (node1:E { eid:"c953fc2d-55fc-4239-910e-ae6e41b3648d" }), 
    (node2:E { eid:"e8cdf5e0-97ad-4e1e-a8e4-29358f8a9866" }), 
    p = allShortestPaths((node1)-[*..5]-(node2)) 
RETURN p 
LIMIT 25; 

をところで、あなたべきcreate an index:E(eid)上のエンドノードのマッチングをスピードアップします。

+0

あなたの助言に感謝しますが、私はcreatインデックスを持っています。 ** 1 ** ** allShortestPathsクエリの** LIMIT **はパフォーマンスにほとんど影響しませんが、** LIMIT **は他のクエリでも動作すると考えることができます。 ** 2 ** "LIMIT"が仕事の量を制限しないのはなぜですか? ** allShortestPaths **アルゴリズムでは、1つずつではなく、すべての最短パスを同時に検索します。使い方? – Leeon

関連する問題