Hi,
I have a slow query:
select ?registrering ?virksomhet where {
values (?registrering) {(<http://difi.oep.dump/journalpost/16125095>)(<http://difi.oep.dump/journalpost/16121527>)}
?registrering arkiv:arkivskaperTransitive ?virksomhet .
}
arkiv:arkivskaperTransitive
is parentTransitive o arkivskaper
and parentTransitive
is simply the transitive super-property of parent
.
Our data looks a bit like this:
<http://difi.oep.dump/journalpost/16125095> arkiv:parent [arkiv:arkivskaper <....>]
But could also be
<http://difi.oep.dump/journalpost/16125095> arkiv:parent [
arkiv:parent [arkiv:arkivskaper <....>]
]
The query plan for the query is as follows:
From all
Distinct [#1.1M]
`─ Projection(?registrering, ?virksomhet) [#1.1M]
`─ HashJoin(?registrering) [#1.1M]
+─ Union [#685K]
│ +─ MergeJoin(?pjzmgjba) [#228K]
│ │ +─ Scan[PSOC](?pjzmgjba, <http://www.arkivverket.no/standarder/noark5/arkivstruktur/arkivskaper>, ?virksomhet) [#57K]
│ │ `─ Scan[POSC](?registrering, <http://www.arkivverket.no/standarder/noark5/arkivstruktur/parent>, ?pjzmgjba) [#228K]
│ `─ MergeJoin(?sowdgyag) [#457K]
│ +─ PropertyPath(?registrering -> ?sowdgyag, minLength=1, sorted by=?sowdgyag) [#457K]
│ │ +─ Scan[POSC](?registrering, <http://www.arkivverket.no/standarder/noark5/arkivstruktur/parent>, ?sowdgyag) [#228K]
│ `─ Scan[PSOC](?sowdgyag, <http://www.arkivverket.no/standarder/noark5/arkivstruktur/arkivskaper>, ?virksomhet) [#57K]
`─ VALUES (?registrering) {
+─ ( http://difi.oep.dump/journalpost/16125095 )
`─ ( http://difi.oep.dump/journalpost/16121527 )
}
Which looks very slow to me. If I rewrite the query to expand the OWL and disable reasoning it is much faster:
Explaining Query:
select ?registrering ?virksomhet where {
values (?registrering) {(<http://difi.oep.dump/journalpost/16125095>)(<http://difi.oep.dump/journalpost/16121527>)}
?registrering arkiv:parent* / arkiv:arkivskaper ?virksomhet .
}
The Query Plan:
From all
Distinct [#0]
`─ Projection(?registrering, ?virksomhet) [#0]
`─ MergeJoin(?unoezzqv) [#0]
+─ Sort(?unoezzqv) [#0]
│ `─ DirectHashJoin(?registrering) [#0]
│ +─ VALUES (?registrering) {
│ │ +─ ( http://difi.oep.dump/journalpost/16125095 )
│ │ `─ ( http://difi.oep.dump/journalpost/16121527 )
│ │ }
│ `─ PropertyPath(?registrering -> ?unoezzqv, minLength=0, sorted by=?registrering) [#3.5M]
│ +─ Scan[PSOC](?registrering, <http://www.arkivverket.no/standarder/noark5/arkivstruktur/parent>, ?unoezzqv) [#228K]
`─ Scan[PSOC](?unoezzqv, <http://www.arkivverket.no/standarder/noark5/arkivstruktur/arkivskaper>, ?virksomhet) [#57K]
Any suggestions for how to make this faster without doing the rewrite?
Cheers,
Håvard