[
https://issues.apache.org/jira/browse/MARMOTTA-575?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergio Fernández updated MARMOTTA-575:
--------------------------------------
Description:
In the typical usage of SPARQL retrieving all properties for a concrete type:
{code:none}
SELECT ?uri ?var1 ?var2 ?varN
WHERE {
?uri a ex:type ;
ex:var1 ?var1 ;
ex:var2 ?var2 ;
ex:varN ?varN .
}
{code}
KiWI performs quite bad, because it creates a {{CROSS JOIN}} for each property:
{code:sql}
SELECT PN.object AS VN, P2.object AS V2, P1.subject AS V1
FROM triples P1
CROSS JOIN
triples P2
CROSS JOIN
triples PN
WHERE P1.deleted = false
AND P1.predicate = 520554470573084672
AND P1.object = 520588903665881088
AND (P1.context = 539803406462763008)
AND P2.deleted = false
AND P1.subject = P2.subject
AND P2.predicate = 520554473039335424
AND (P2.context = 539803406462763008)
AND PN.deleted = false
AND P1.subject = PN.subject
AND PN.predicate = 527860595421151232
AND (PN.context = 539803406462763008)
{code}
Making the subject fixed is actually a quite fast query.
was:
In the typical usage of SPARQL retrieving all properties for a concrete type:
{code:none}
SELECT ?uri ?var1 ?var2 ?varN
WHERE {
?uri a ex:type ;
ex:var1 ?var1 ;
ex:var2 ?var2 ;
ex:varN ?varN .
}
{code}
KiWI performs quite bad, because it creates a {{CROSS JOIN}} for each property:
{code:sql}
SELECT PN.object AS VN, P2.object AS V2, P1.subject AS V1, P8.object AS V8
FROM triples P1
CROSS JOIN
triples P2
CROSS JOIN
triples PN
WHERE P1.deleted = false
AND P1.predicate = 520554470573084672
AND P1.object = 520588903665881088
AND (P1.context = 539803406462763008)
AND P2.deleted = false
AND P1.subject = P2.subject
AND P2.predicate = 520554473039335424
AND (P2.context = 539803406462763008)
AND PN.deleted = false
AND P1.subject = PN.subject
AND PN.predicate = 527860595421151232
AND (PN.context = 539803406462763008)
{code}
Making the subject fixed is actually a quite fast query.
> SELECT queries over a free subject generated to many CROSS JOINs
> ----------------------------------------------------------------
>
> Key: MARMOTTA-575
> URL: https://issues.apache.org/jira/browse/MARMOTTA-575
> Project: Marmotta
> Issue Type: Improvement
> Components: KiWi Triple Store
> Affects Versions: 3.3.0
> Reporter: Sergio Fernández
> Labels: sparql
> Fix For: 3.4.0
>
>
> In the typical usage of SPARQL retrieving all properties for a concrete type:
> {code:none}
> SELECT ?uri ?var1 ?var2 ?varN
> WHERE {
> ?uri a ex:type ;
> ex:var1 ?var1 ;
> ex:var2 ?var2 ;
> ex:varN ?varN .
> }
> {code}
> KiWI performs quite bad, because it creates a {{CROSS JOIN}} for each
> property:
> {code:sql}
> SELECT PN.object AS VN, P2.object AS V2, P1.subject AS V1
> FROM triples P1
> CROSS JOIN
> triples P2
> CROSS JOIN
> triples PN
> WHERE P1.deleted = false
> AND P1.predicate = 520554470573084672
> AND P1.object = 520588903665881088
> AND (P1.context = 539803406462763008)
> AND P2.deleted = false
> AND P1.subject = P2.subject
> AND P2.predicate = 520554473039335424
> AND (P2.context = 539803406462763008)
> AND PN.deleted = false
> AND P1.subject = PN.subject
> AND PN.predicate = 527860595421151232
> AND (PN.context = 539803406462763008)
> {code}
> Making the subject fixed is actually a quite fast query.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)