[ https://issues.apache.org/jira/browse/TINKERPOP-2325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17013032#comment-17013032 ]
Stephen Mallette commented on TINKERPOP-2325: --------------------------------------------- [~m.valzelli] thanks for commenting.... I did that initial change to {{TraversalBuilder}} too with good effect: {code} gremlin> g.sparql("SELECT ?x WHERE { ?x v:name 'marko' }").explain() ==>Traversal Explanation =============================================================================================================================================================== Original Traversal [InjectStep([SELECT ?x WHERE { ?x v:name 'marko' }])] ConnectiveStrategy [D] [InjectStep([SELECT ?x WHERE { ?x v:name 'marko' }])] SparqlStrategy [D] [GraphStep(vertex,[]), MatchStep(AND,[[MatchStartStep(x), HasStep([name.eq(marko)]), MatchEndStep]]), SelectOneStep(last,x)] EarlyLimitStrategy [O] [GraphStep(vertex,[]), MatchStep(AND,[[MatchStartStep(x), HasStep([name.eq(marko)]), MatchEndStep]]), SelectOneStep(last,x)] MatchPredicateStrategy [O] [GraphStep(vertex,[]), MatchStep(AND,[[MatchStartStep(x), HasStep([name.eq(marko)]), MatchEndStep]]), SelectOneStep(last,x)] FilterRankingStrategy [O] [GraphStep(vertex,[]), MatchStep(AND,[[MatchStartStep(x), HasStep([name.eq(marko)]), MatchEndStep]]), SelectOneStep(last,x)] InlineFilterStrategy [O] [GraphStep(vertex,[]), HasStep([name.eq(marko)])@[x], SelectOneStep(last,x)] IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), HasStep([name.eq(marko)])@[x], SelectOneStep(last,x)] AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), HasStep([name.eq(marko)])@[x], SelectOneStep(last,x)] RepeatUnrollStrategy [O] [GraphStep(vertex,[]), HasStep([name.eq(marko)])@[x], SelectOneStep(last,x)] CountStrategy [O] [GraphStep(vertex,[]), HasStep([name.eq(marko)])@[x], SelectOneStep(last,x)] PathRetractionStrategy [O] [GraphStep(vertex,[]), HasStep([name.eq(marko)])@[x], SelectOneStep(last,x)] LazyBarrierStrategy [O] [GraphStep(vertex,[]), HasStep([name.eq(marko)])@[x], SelectOneStep(last,x)] TinkerGraphCountStrategy [P] [GraphStep(vertex,[]), HasStep([name.eq(marko)])@[x], SelectOneStep(last,x)] TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[name.eq(marko)])@[x], SelectOneStep(last,x)] ProfileStrategy [F] [TinkerGraphStep(vertex,[name.eq(marko)])@[x], SelectOneStep(last,x)] StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[name.eq(marko)])@[x], SelectOneStep(last,x)] Final Traversal [TinkerGraphStep(vertex,[name.eq(marko)])@[x], SelectOneStep(last,x)] {code} The change seemed almost too easy so I asked for thoughts from [~harsh9t] and am awaiting response: https://twitter.com/spmallette/status/1215618361603870720 I'd be happy to review a pull request with your changes if you'd care to submit what you have. > Generate traversals that will better yield index lookups with SPARQL > -------------------------------------------------------------------- > > Key: TINKERPOP-2325 > URL: https://issues.apache.org/jira/browse/TINKERPOP-2325 > Project: TinkerPop > Issue Type: Improvement > Components: sparql > Affects Versions: 3.4.4 > Reporter: Stephen Mallette > Priority: Major > > The following simple bit of SPARQL generates a {{match()}} that wont easily > be converted to further utilize indices. > {code} > gremlin> s.sparql("SELECT ?x WHERE { ?x v:name 'marko' }").explain() > ==>Traversal Explanation > =========================================================================================================================================================================================== > Original Traversal [InjectStep([SELECT ?x WHERE { ?x v:name > 'marko' }])] > ConnectiveStrategy [D] [InjectStep([SELECT ?x WHERE { ?x v:name > 'marko' }])] > SparqlStrategy [D] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > MatchPredicateStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > FilterRankingStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > EarlyLimitStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > InlineFilterStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > RepeatUnrollStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > CountStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > PathRetractionStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > LazyBarrierStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > TinkerGraphCountStrategy [P] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > ProfileStrategy [F] [TinkerGraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > Final Traversal [TinkerGraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > {code} > {{sparql-gremlin}} needs some improvements in this area. -- This message was sent by Atlassian Jira (v8.3.4#803005)