Dear all,
I have a dataset with (among other things) about 400,000 triples in the form
?a adm:logDate ?d
where ?d is an xsd:dateTime. I'm writing a query to get all the
triples that have a ?d in a certain interval. There are usually very
few of them (around say 200). I'm writing a query that looks like
construct {
?va adm:hasactivityon ?d .
} where {
?le adm:logDate ?d .
FILTER(?d > "2020-08-01T00:00:00"^^xsd:dateTime)
?va adm:logEntry ?le .
}
But it's too slow for our purpose (3.5s). I suspect it's conceptually
simple to have very performant implementation (using an index
dedicated to xsd:dateTime literal that could be queried), but I also
suspect SPARQL doesn't make that kind of performant algorithm to
summon in such a query (which is a mix of a bgp and a filter instead
of a direct call to a performant index).
So a few questions:
- are there other ways to write this query to make it more performant?
- my impression is that what I want with time is similar to what
GeoSPARQL provides for space... is there something similar to
GeoSPARQL for time?
- would that kind of performant index require the same type of
mechanism as the jena:text extension?
- is it worth reporting this on the SPARQL 1.2 github repo?
Thanks in advance,
--
Elie