0

次のスキーマが与えられた場合: (曲がっていて申し訳ありません)

スキーマ

ある場所でのアクティビティのリストと、その場所でその特定のアクティビティをプレイしている人数の数を取得しようとしています。

start root = node(0)
> match root-[:HAS_PLACE]->place-[:CAN_PLAY]->activity<-[:CAN_PLAY]-place2<-[?:PLAYS_AT]-user
> where place.Id = 1307
> return activity, count(user)
==> +---------------------------------------------------+
==> | activity                            | count(user) |
==> +---------------------------------------------------+
==> | Node[5]{Name->"Swimming",Id->5}     | 0           |
==> | Node[3]{Name->"Kick Boxing",Id->3}  | 0           |
==> | Node[12]{Name->"Basketball",Id->22} | 0           |
==> | Node[13]{Name->"Handball",Id->23}   | 0           |
==> | Node[6]{Name->"Racquetball",Id->6}  | 0           |
==> | Node[2]{Name->"Aerobics",Id->2}     | 0           |
==> +---------------------------------------------------+
==> 6 rows, 21403 ms 

上記は私が望むことだと思いますが、21秒かかるのは良いことではありません. オプションの関係またはバックトラックが原因だと思いますが、どうすればより良いクエリを作成できますか?

4

1 に答える 1

4

試す:

start root = node(0)
match root-[:HAS_PLACE]->place-[:CAN_PLAY]->activity, user-[?:PLAYS_AT]->place
where place.Id = 1307
return activity, count(user)

または、プレースノードでインデックスを使用して、次の手順を実行します。

start place = node:places(Id=1307)
match place-[:CAN_PLAY]->activity, user-[?:PLAYS_AT]->place
return activity, count(user)
于 2012-11-14T18:18:00.087 に答える