SPARQL Query With Property Path Has Poor Performance
(Doc ID 1574510.1)
Last updated on APRIL 01, 2020
Applies to:
Oracle Spatial and Graph - Version 11.2.0.3 and laterInformation in this document applies to any platform.
Symptoms
SPARQL Query with property path has poor performance
We have a SPARQL query containing a property path with a + at the end : (fim:fraOrganisasjonsrelasjon/fim:fraRolleOrganisasjonselement)+
The query runs for about 5 minutes before the result is returned. If we modify the query to use explicit paths (see attached file), it returns the result in under 2 seconds, but this solution is not very flexible. We would like to be able to use the original form of the SPARQL query, but we cannot wait for 5 minutes. The original SPARQL query seems to be translated to a lot of SQL statements. Any suggestions?
Original:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fim: <http://nav.no/organisasjon/vocab/>
CONSTRUCT
{ <http://nav.no/organisasjon/Organisasjonsenhet/1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> fim:Organisasjonsenhet .
<http://nav.no/organisasjon/Organisasjonsenhet/1> fim:aarsverk ?aarsverk .}
WHERE
{ SELECT (( sum(?prosentCasted) / 100 ) AS ?aarsverk)
WHERE
{ ?ressurs fim:erTilknyttetVia ?organisasjonstilknytning .
?ressurs fim:beregnetAktiv true .
?organisasjonstilknytning <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> fim:Stilling .
?organisasjonstilknytning fim:gyldighetsperiode ?tilknPeriode .
?organisasjonstilknytning fim:stillingsprosent ?prosent .
?organisasjonstilknytning fim:inneharOrganisasjonsStilling ?organisasjonselementStillingURI .
?organisasjonselementStillingURI <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> fim:OrganisasjonselementStilling .
?organisasjonselementStillingURI fim:gyldighetsperiode ?allokeringPeriode .
?tilknPeriode fim:fom ?fraDato .
?tilknPeriode fim:tom ?tilDato .
?allokeringPeriode <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> fim:Periode .
?allokeringPeriode fim:fom ?allokeringFraDato .
?allokeringPeriode fim:tom ?allokeringTilDato
{ ?organisasjonselementStillingURI fim:harStillingIOrganisasjonselement <http://nav.no/organisasjon/Organisasjonsenhet/1> }
UNION
{ ?organisasjonselementStillingURI fim:harStillingIOrganisasjonselement ?tilknyttetOrgenhet .
?tilknyttetOrgenhet (fim:fraOrganisasjonsrelasjon/fim:fraRolleOrganisasjonselement)+ <http://nav.no/organisasjon/Organisasjonsenhet/1>
}
BIND(xsd:float(?prosent) AS ?prosentCasted)
FILTER ( ( now() >= xsd:dateTime(?fraDato) ) && ( now() FILTER ( ( now() >= xsd:dateTime(?allokeringFraDato) ) && ( now() }
}
---
Modified:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fim: <http://nav.no/organisasjon/vocab/>
CONSTRUCT
{ <http://nav.no/organisasjon/Organisasjonsenhet/1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> fim:Organisasjonsenhet .
<http://nav.no/organisasjon/Organisasjonsenhet/1> fim:aarsverk ?aarsverk .}
WHERE
{ SELECT (( sum(?prosentCasted) / 100 ) AS ?aarsverk)
WHERE
{ ?ressurs fim:erTilknyttetVia ?organisasjonstilknytning .
?ressurs fim:beregnetAktiv true .
?organisasjonstilknytning <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> fim:Stilling .
?organisasjonstilknytning fim:gyldighetsperiode ?tilknPeriode .
?organisasjonstilknytning fim:stillingsprosent ?prosent .
?organisasjonstilknytning fim:inneharOrganisasjonsStilling ?organisasjonselementStillingURI .
?organisasjonselementStillingURI <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> fim:OrganisasjonselementStilling .
?organisasjonselementStillingURI fim:gyldighetsperiode ?allokeringPeriode .
?tilknPeriode fim:fom ?fraDato .
?tilknPeriode fim:tom ?tilDato .
?allokeringPeriode <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> fim:Periode .
?allokeringPeriode fim:fom ?allokeringFraDato .
?allokeringPeriode fim:tom ?allokeringTilDato
{ ?organisasjonselementStillingURI fim:harStillingIOrganisasjonselement <http://nav.no/organisasjon/Organisasjonsenhet/1> }
UNION
{ ?organisasjonselementStillingURI fim:harStillingIOrganisasjonselement ?tilknyttetOrgenhet .
?tilknyttetOrgenhet fim:fraOrganisasjonsrelasjon/fim:fraRolleOrganisasjonselement <http://nav.no/organisasjon/Organisasjonsenhet/1>
}
UNION
{ ?organisasjonselementStillingURI fim:harStillingIOrganisasjonselement ?tilknyttetOrgenhet .
?tilknyttetOrgenhet ((fim:fraOrganisasjonsrelasjon/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement <http://nav.no/organisasjon/Organisasjonsenhet/1>
}
UNION
{ ?organisasjonselementStillingURI fim:harStillingIOrganisasjonselement ?tilknyttetOrgenhet .
?tilknyttetOrgenhet ((((fim:fraOrganisasjonsrelasjon/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement <http://nav.no/organisasjon/Organisasjonsenhet/1>
}
UNION
{ ?organisasjonselementStillingURI fim:harStillingIOrganisasjonselement ?tilknyttetOrgenhet .
?tilknyttetOrgenhet ((((((fim:fraOrganisasjonsrelasjon/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement <http://nav.no/organisasjon/Organisasjonsenhet/1>
}
UNION
{ ?organisasjonselementStillingURI fim:harStillingIOrganisasjonselement ?tilknyttetOrgenhet .
?tilknyttetOrgenhet ((((((((fim:fraOrganisasjonsrelasjon/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement)/fim:fraOrganisasjonsrelasjon)/fim:fraRolleOrganisasjonselement <http://nav.no/organisasjon/Organisasjonsenhet/1>
}
BIND(xsd:float(?prosent) AS ?prosentCasted)
FILTER ( ( now() >= xsd:dateTime(?fraDato) ) && ( now() FILTER ( ( now() >= xsd:dateTime(?allokeringFraDato) ) && ( now() }
}
Cause
To view full details, sign in with your My Oracle Support account. |
|
Don't have a My Oracle Support account? Click to get started! |
In this Document
Symptoms |
Cause |
Solution |