1

私がやっていることは、すべてのプロファイルを取得することです *ユーザープロファイルと特定の有向関係を持っている* そして、それらに代替プロファイルがある場合 *ユーザーの代替プロファイルがそれに関連している場合に備えてそれらを取得します。関係の方向性も必要です。

私の問題は、約 10000 ノードでデータを取得するのに約 5 秒かかることです。ノードと関係に自動インデックスがあります。

これは私のノードがどのように関連しているかです:

User-[:profile]->ProfileA-[:related]->ProfileB<-[?:me]->ProfileB2<-[?:related]-ProfileA2<-[:profile]-User

私のクエリは次のようになります。

START User=node({source}) 
MATCH User-[:profile]->ProfileA-[rel:related]->ProfileB 
WHERE User-->ProfileA-->ProfileB 
WITH ProfileA, rel, ProfileB 
MATCH ProfileB<-[?:me]->ProfileB2<-[relB?:related]-ProfileA2<-[:profile]-User 
WHERE relB IS NULL OR User-->ProfileA-->ProfileB<-->ProfileB2<--ProfileA2<--User
RETURN ProfileB, COLLECT(ProfileB2), rel, relB
LIMIT 25

クエリを最適化する方法はありますか?


  • プロファイル: プロファイル B
  • ユーザー プロファイル: ProfileA
  • 代替プロファイル: ProfileB2
  • ユーザーの代替プロファイル: ProfileA2
4

2 に答える 2

6

WHERE必要のない節を使用しています。たとえば、最初のものを見てみましょう。

WHERE User-->ProfileA-->ProfileB 

この句は、「それ自体が ProfileB と関係を持つ ProfileA と関係を持つユーザーのみに結果を制限する」ことを示しています。ただし、それは match 句によってすでに true であることが保証されています。すでに正しいことを再検証するために、CPU サイクルを浪費しています。

WITH ProfileA, rel, ProfileB 

WITH集計、計算、または再割り当てを行っていないため、この句は必要ありません。無くても続けられます。

WHERE relB IS NULL OR User-->ProfileA-->ProfileB<-->ProfileB2<--ProfileA2<--User

WHERE繰り返しますが、この句からは何の価値も得られません。これは、「結果を relB が見つからなかったパス、または次のパスで見つかったパスに制限する...」と述べており、MATCH.

したがって、これらの無関係な句をすべて削除すると、次のようになります。

START User=node({source}) 
MATCH User-[:profile]->ProfileA-[rel:related]->ProfileB<-[?:me]->ProfileB2<-[relB?:related]-ProfileA2<-[:profile]-User 
RETURN ProfileB, COLLECT(ProfileB2), rel, relB
LIMIT 25

それを試して、パフォーマンスが向上するかどうかを確認してください。それが十分でない場合は、質問にさらに情報を追加する必要があるかもしれません-私自身、あなたの関係が実際に何を意味するのかを完全には理解していません(たとえば、「私」の関係とは何ですか?それは何を象徴していますか? )

于 2013-03-01T01:38:13.150 に答える
1

これが私がそれを解決した方法です:

START User=node({source}) 
MATCH User-[:profile]->ProfileA-[rel:related]->ProfileB<-[?:me]->ProfileB2-[relB?:related]-ProfileA2
WHERE relB IS NULL OR User-[:profile]->ProfileA2
RETURN ProfileB, COLLECT(ProfileB2), rel, relB
LIMIT 25

ProfileA2<-[:profile]-User無限ループを生み出しているように見えました。

推薦は引き続き歓迎します。

于 2013-03-03T22:12:21.077 に答える