Given the following schema: (sorry it’s crooked)

I’m trying to get back a list of activities at a place and a count of how many play that particular activity at that place.
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
While I think the above does what I want, taking 21 seconds isn’t a good thing. I believe it’s due to the optional relationship or even backtracking, but how could I make a better query?
try:
or use an index on the placenodes and do: