[ https://issues.apache.org/jira/browse/JENA-1926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17147376#comment-17147376 ]
Julian Gonggrijp commented on JENA-1926: ---------------------------------------- [~andy] So these particular two queries happen to be equivalent, although the same could not be safely assumed about similar pairs of queries in general. Point taken and thanks for confirming. >From your explanation, I understand that the realized performance depends on >many factors, only some of which are predictable across datasets and >installations, and that it may be premature to document this particular >situation for this reason. The somewhat spectacular performance difference >between these particular two queries on my particular dataset and installation >might be a statistical fluke. I will let this rest. Thanks again for your patience and guidance, also to [~rvesse]. I wish you good luck and perhaps we will meet again, here on Jira or maybe even in the Jena codebase. > Query execution speed depends more on WHERE clause order than expected > ---------------------------------------------------------------------- > > Key: JENA-1926 > URL: https://issues.apache.org/jira/browse/JENA-1926 > Project: Apache Jena > Issue Type: Improvement > Components: ARQ > Affects Versions: Jena 3.15.0 > Reporter: Julian Gonggrijp > Priority: Minor > > The following query takes about 6.5 seconds with my dataset, which > unfortunately I cannot share. Note that {{?source}} is bound to a single IRI > in all queries below; I'm leaving that out for brevity. > {code:java} > PREFIX oa: <http://www.w3.org/ns/oa#> > PREFIX dcterms: <http://purl.org/dc/terms/> > CONSTRUCT { > ?annotation ?a ?b. > ?body ?c ?d. > ?target ?e ?f. > ?selector ?g ?h. > } WHERE { > ?annotation oa:hasBody ?body; > oa:hasTarget ?target; > dcterms:creator ?user; > ?a ?b. > ?target oa:hasSource ?source; > oa:hasSelector ?selector; > ?e ?f. > ?selector ?g ?h. > OPTIONAL { ?body ?c ?d }. > } > {code} > Compare this to the following query, which I believe is exactly equivalent > but takes only 2 seconds: > {code:java} > CONSTRUCT { > ?annotation ?a ?b. > ?body ?c ?d. > ?target ?e ?f. > ?selector ?g ?h. > } WHERE { > ?annotation oa:hasBody ?body. > OPTIONAL { ?body ?c ?d }. > ?annotation oa:hasTarget ?target; > dcterms:creator ?user; > ?a ?b. > ?target oa:hasSource ?source; > oa:hasSelector ?selector; > ?e ?f. > ?selector ?g ?h. > } > {code} > For comparison, leaving out the optional {{?body}} entirely, I get a query > that executes in 1.7 seconds: > {code:java} > CONSTRUCT { > ?annotation ?a ?b. > ?target ?e ?f. > ?selector ?g ?h. > } WHERE { > ?annotation oa:hasTarget ?target; > dcterms:creator ?user; > ?a ?b. > ?target oa:hasSource ?source; > oa:hasSelector ?selector; > ?e ?f. > ?selector ?g ?h. > } > {code} > I'm a novice to SPARQL, but coming from SQL, I wouldn't expect query > execution speed to depend so much on the order in which the criteria are > given. -- This message was sent by Atlassian Jira (v8.3.4#803005)