[ 
https://issues.apache.org/jira/browse/JENA-383?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andy Seaborne updated JENA-383:
-------------------------------

    Priority: Major  (was: Minor)
    
> The query optimizer generates a suboptimal query plan in case of nested 
> optionals followed by a filter
> ------------------------------------------------------------------------------------------------------
>
>                 Key: JENA-383
>                 URL: https://issues.apache.org/jira/browse/JENA-383
>             Project: Apache Jena
>          Issue Type: Improvement
>          Components: ARQ, Optimizer
>    Affects Versions: ARQ 2.9.4
>            Reporter: Giovanni Mels
>              Labels: filter, nested, optimization, optional
>         Attachments: simple-query.rq
>
>
> The query optimizer generates a suboptimal query plan in case of nested 
> optionals followed by a filter (?var = <uri>).
> The problem is similar to the problem discussed here 
> http://markmail.org/message/zy5qx47hxfo2vdlg, except we have nested optionals 
> in our query (There are no scope problems, all optionals are translated to 
> conditionals). It is only the filter that is translated differently:
> arq-2.8.8
>   (extend ((?var <uri>))
>     (conditional
>       (conditional
>         (conditional
>           (conditional
>             (conditional
>               (conditional
>                 (bgp
>                               ...
>                               
> jena-arq-2.9.4
>   (filter (= ?var <uri>)
>     (conditional
>       (conditional
>         (conditional
>           (conditional
>             (conditional
>               (conditional
>                 (bgp
>                               ...
> Query times went from milliseconds to over 7 minutes because of this.
> I reduced the query to this test case:
> PREFIX ex: <http://example.org/test#>
> SELECT * WHERE {
>     ?var ex:p1 ?x.
>     
>     OPTIONAL {
>         ?x ex:p2 ?y.
>         
>         OPTIONAL {
>             ?y ex:p3 ?z
>         }
>     }
>     
>     FILTER (?var = ex:i)
> }
>   (filter (= ?var <http://example.org/test#i>)
>     (conditional
>       (bgp (triple ?var <http://example.org/test#p1> ?x))
>       (conditional
>         (bgp (triple ?x <http://example.org/test#p2> ?y))
>         (bgp (triple ?y <http://example.org/test#p3> ?z)))))
>               
>               
> The nested OPTIONAL seems to be the problem here, removing it gives
>   (assign ((?var <http://example.org/test#i>))
>     (conditional
>       (bgp (triple <http://example.org/test#i> <http://example.org/test#p1> 
> ?x))
>       (bgp
>         (triple ?x <http://example.org/test#p2> ?y)
>         (triple ?y <http://example.org/test#p3> ?z)
>       )))
>  
> This might be related to JENA-294. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to