以下查询从我的数据集加载合同(合同在组织和合作伙伴之间)。
SELECT ?contract ?organisation ?partner
WHERE {
?organisation
a gr:BusinessEntity ;
rejstriky:contract ?contract .
?contract a rejstriky:Contract ;
rejstriky:partner ?partner .
}
GROUP BY ?contract ?organisation ?partner
此查询返回大约8000个合约,并立即执行此操作(仅需几分之一秒)。现在我需要为组织和合作伙伴加载标签/名称。可能有多个名称,我只需要一个。这是我的问题:
SELECT ?contract ?organisation ?partner
(SAMPLE(?organisationNames) AS ?organisationName)
(SAMPLE(?partnerNames) AS ?partnerName)
WHERE {
?organisation
a gr:BusinessEntity ;
rejstriky:contract ?contract .
?contract a rejstriky:Contract ;
rejstriky:partner ?partner .
?organisation gr:legalName ?organisationNames .
?partner gr:legalName ?partnerNames .
}
GROUP BY ?contract ?organisation ?partner
此查询突然需要几分钟才能完成。
我做了一些实验,我发现如果我决定使用单独的SPARQL调用获取所有名称(在一个批次中使用40个名称),则需要不到2分钟(这会快得多)。无论如何,如果我能够在几分之一秒内生成这8000个项目,为每个项目加载两个标签不应该花那么长时间。
您对如何优化查询有任何想法吗?请注意,我正在使用Virtuoso。
答案 0 :(得分:0)
无法访问样本数据或Virtuoso很难确定这是否有用,但您可以尝试避免使用SAMPLE。
SELECT ?contract ?organisation ?organisationName ?partner ?partnerName
WHERE {
?organisation
a gr:BusinessEntity ;
rejstriky:contract ?contract .
?contract a rejstriky:Contract ;
rejstriky:partner ?partner .
{ SELECT ?organisationName WHERE { ?organisation gr:legalName ?organisationName . } LIMIT 1}
{ SELECT ?partnerName WEHRE {?partner gr:legalName ?partnerName . } LIMIT 1}
}
GROUP BY ?contract ?organisation ?organisationName ?partner ?partnerName