Optimizes a query model by pushing
Filter
s as far down in the model tree as possible.
To make the first optimization succeed more often it splits filters which contains
And
conditions.
SELECT * WHERE {
?s ?p ?o .
?s ?p ?o2 .
FILTER(?o > '2'^^xsd:int && ?o2 < '4'^^xsd:int)
}
May be more efficient when decomposed into
SELECT * WHERE {
?s ?p ?o .
FILTER(?o > '2'^^xsd:int)
?s ?p ?o2 .
FILTER(?o2 < '4'^^xsd:int)
}
Then it optimizes a query model by merging adjacent
Filter
s. e.g.
SELECT * WHERE {
?s ?p ?o .
FILTER(?o > 2) .
FILTER(?o < 4) .
}
may be merged into
SELECT * WHERE {
?s ?p ?o .
FILTER(?o > 2 && ?o < 4) . }
This optimization allows for sharing evaluation costs in the future and removes an iterator. This is done as a second
step to not break the first optimization. In the case that the splitting was done but did not help it is now undone.