Julian Gonggrijp created JENA-1926:
--------------------------------------

             Summary: 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: Fuseki, TDB2
    Affects Versions: Jena 3.15.0
            Reporter: Julian Gonggrijp


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)

Reply via email to