The shortestPath: shortestPath( (ea)<-[:maps_to*]-(eb) ) before: +VarLengthExpand(All) | 128 | 669618290 | 1494585385 | | (ea)<-[:maps_to*]-(eb)
after: | +ShortestPath | 28884702 | 678 | 169955 | | +CartesianProduct | 28884702 | 169955 | 0 | Since I have a lot of duplicate paths I assume the shortest path only traverses a path once giving me a distinct path. Before I would traverse all different path combinations (some of them multiple times) and then filter them out with a distinct. I think I misunderstood what the shortest path algorithm does. On Tuesday, 17 January 2017 14:47:55 UTC+1, Michael Hunger wrote: > > Which one did the change and would you be able to share the query plan for > that fast query with us? > > Michael > > On Tue, Jan 17, 2017 at 10:46 AM, <tomasz....@closeit.cz <javascript:>> > wrote: > >> Did the change and the time went down to 20 seconds! >> >> Incredible. >> >> Thanks for the hint! >> >> >> On Tuesday, 17 January 2017 07:59:52 UTC+1, tomasz....@closeit.cz wrote: >>> >>> Yes, there are indexes. >>> >>> I was wondering about the shortest path but I need all the paths that >>> end at specific nodes, usually they will not be the shortests. I will try >>> to see if the results are the same with this modification. >>> >>> On Tuesday, 17 January 2017 03:31:59 UTC+1, Michael Hunger wrote: >>>> >>>> I presume you have an index / constraint on nodeType1.fullname AND >>>> nodeType1.name?! >>>> >>>> not sure why you do the pattern match first and only then the property >>>> lookup. >>>> >>>> What version are you using? in Neo4j 3.1 for the query below you should >>>> see much better performance: >>>> >>>> match (ea:nodeType1 {name:"something1"})<-[:maps_to*]-(eb:nodeType1) >>>> where eb.fullname starts with "something" >>>> with distinct ea, eb >>>> return ea.name <http://el.name/>, eb.name <http://et.name/>; >>>> >>>> I would also think that shortest-path is much more sensible here: >>>> >>>> match (ea:nodeType1 {name:"something1"}) >>>> match (eb:nodeType1) where eb.fullname starts with "something" >>>> match shortestPath( (ea)<-[:maps_to*]-(eb) ) >>>> with distinct ea, eb >>>> return ea.name <http://el.name/>, eb.name <http://et.name/>; >>>> >>>> On Mon, Jan 16, 2017 at 9:19 PM, <tomasz....@closeit.cz> wrote: >>>> >>>>> Hi, I have a very expensive query that I'm trying to figure out how to >>>>> optimise. >>>>> >>>>> match (ea:nodeType1 {name:"something1"})<-[:maps_to*]-(eb:nodeType1) >>>>> with distinct ea, eb match (eb) where eb.fullname starts with >>>>> "something" return ea.name <http://el.name/>, eb.name >>>>> <http://et.name/>; >>>>> >>>>> I've used the profiler and as expected the expand all is the most >>>>> expensive part of the operation >>>>> >>>>> +Filter | 128 | 334812480 | 669618290 | >>>>> | >>>>> +VarLengthExpand(All) | 128 | 669618290 | 1494585385 | | >>>>> (ea)<-[:maps_to*]-(eb) >>>>> >>>>> >>>>> >>>>> I've used the profiler and brought down the running time from 3 hours >>>>> to 2,15. I then tried the enterprise version hoping that the query would >>>>> use the available processors but it used only one so I'm assuming that >>>>> cypher is not parallelizable. >>>>> >>>>> Is there some quick win to speed up a distinct path query or do I have >>>>> to write my own using the java api? >>>>> >>>>> p.s: the query might not compile as I've tried to summarise the gist >>>>> of the issue. >>>>> >>>>> -- >>>>> 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 neo4j+un...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >> 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 neo4j+un...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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 neo4j+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.