优化SPARQL查询性能问题
我正在寻找优化下面的查询,目前该查询需要大约1m 20秒,大约213500个三元组。我正在寻找任何关于该查询的优化建议 我知道Optional在这里占用了大部分时间,但是有没有其他选项可以获得类似的结果集 我还在图片中附上了我们的资源地图优化SPARQL查询性能问题,sparql,rdf,ontology,Sparql,Rdf,Ontology,我正在寻找优化下面的查询,目前该查询需要大约1m 20秒,大约213500个三元组。我正在寻找任何关于该查询的优化建议 我知道Optional在这里占用了大部分时间,但是有没有其他选项可以获得类似的结果集 我还在图片中附上了我们的资源地图 通常没有有意义的方法来回答这个问题,因为性能将取决于您使用的RDF数据库以及数据的大小和形状。大多数数据库都有查询计划解释功能,但您可以使用该功能分析查询并查看瓶颈在哪里。除了Jeen所说的,1)您的查询很奇怪,在哪里?在的where部分绑定了三个?那么,?
通常没有有意义的方法来回答这个问题,因为性能将取决于您使用的RDF数据库以及数据的大小和形状。大多数数据库都有查询计划解释功能,但您可以使用该功能分析查询并查看瓶颈在哪里。除了Jeen所说的,1)您的查询很奇怪,
在哪里?在的where
部分绑定了三个?那么,?cref?p?o的意义是什么呢。{?cref?p?o.}
?为什么不将可选模式放在另一个可选模式中:optional{o?p2?o2.}optional{o?a xyz:author;?p3?o3.}
3)而不是过滤器(?o1 in(“新建”、“验证”))
为什么不使用值呢
?1)抱歉,更正了我对三元组的查询,它是?cref 2)最初的力没有这个部分,但似乎图形力没有包含?cref的谓词,所以我以这种方式包含它。可能这不是正确的方法(如果你能帮助我也更正它)3)你是说在同一个可选括号内添加两个三重模式?因为当我尝试这样做的时候,我没有收到想要的结果,如果任何值丢失4)我可以将过滤器更改为值4)作为@JeenBroekstra,我目前在这里使用的是Neptune,当然,相同的查询在其他三重存储上会给出更好的结果,但是我在这里是否有什么地方做错了?我检查了查询并解释了该功能,结果显示所用的最大时间与可选时间一致,因此是否有更好的方法对其进行优化?@UninformedUser立即更新了查询中的值。
CONSTRUCT
{
?cref ?p ?o .
?o ?p1 ?o1 .
?o ?p2 ?o2 .
?o2 ?p3 ?o3 .
}
WHERE
{
{
SELECT DISTINCT ?cref
WHERE {
{ ?cref xyz:hasSourceBrand xyz:abc .}
union
{ ?cref xyz:hasTargetBrand xyz:abc .}
VALUES ?o1 { "New" "Validated" }
?cref xyz:CrossReferenceStatus ?o1 .
}
}
?cref ?p ?o .
{
?cref ?p ?o .
}
UNION
{
?o a xyz:Part .
OPTIONAL { ?o ?p1 ?o1 .}
}
UNION
{
?o a xyz:CrossReferenceRelation .
OPTIONAL { ?o ?p2 ?o2 .}
OPTIONAL { ?o2 a xyz:author ;
?p3 ?o3 .
}
}
}