Hi Andrés, Thanks for your clear reply. I got enough info to carry on now.
Cheers On Friday, March 7, 2014 4:30:24 PM UTC+11, Andres Taylor wrote: > > Hi there, > > How Cypher planning is done is something we are spending considerable > energy in improving right now, actually. > > Long story short - your query is really bad for performance. Cypher is not > clever enough to realise that it's doing a lot of unnecessary work. > > When you pull in things in the MATCH clause, the number of matches is > influenced, even if you don't include it in the RETURN clause. In this > particular query, you get around that by using collect(distinct aka), but > that's a rare edge case that we haven't taught Cypher to look for. > > So, to answer your question, Cypher will match your whole pattern, even if > it's not strictly needed, and then return what you ask for in RETURN. We're > making the planner much smarter, but this is a little bit of an edge case, > so I don't expect it to be something we work on in the immediate future. > > HTH, > > Andrés > > > On Fri, Mar 7, 2014 at 3:35 AM, Rajeev Joseph > <[email protected]<javascript:> > > wrote: > >> Hi guys, >> >> The below query matches a whole lot of nodes but only returns a few. >> >> I would like to know how neo4j processes the query internally. Mainly, >> will neo4j first fetch all the nodes from the MATCH statement and then >> return the ones we need or does it optimise the query first by looking at >> the RETURN statement and matching only the ones that makes sense. I'm >> concerned about performance. >> >> I appreciate that a query like the below with redundant matches doesn't >> make much sense. The reason we have such queries is that we construct >> queries for complex models in our code, rather than hand crafting each >> individual query. >> >> Example of a query I'm concerned about: >> >> START root=node(0) >> MATCH >> root-[:HAS_PERSON]-person, >> person-[?:HAS_LANGUAGE]-lang, >> person-[?:HAS_ETHNICITY]-ethnicity, >> person-[?:HAS_OFFENCE]-offence, >> person-[?:HAS_AKA]-aka, >> person-[?:HAS_EMAIL]-email, >> person-[?:HAS_PHONE]-phone, >> person-[?:HAS_ADDRESS]-address >> WHERE person.Id = 123 >> RETURN person, collect(distinct aka) >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Neo4j" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > The best way to ask for Cypher help: http://console.neo4j.org/usage.html > > -- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
