优化SPARQL查询性能问题

优化SPARQL查询性能问题,sparql,rdf,ontology,Sparql,Rdf,Ontology,我正在寻找优化下面的查询,目前该查询需要大约1m 20秒,大约213500个三元组。我正在寻找任何关于该查询的优化建议 我知道Optional在这里占用了大部分时间,但是有没有其他选项可以获得类似的结果集 我还在图片中附上了我们的资源地图 通常没有有意义的方法来回答这个问题,因为性能将取决于您使用的RDF数据库以及数据的大小和形状。大多数数据库都有查询计划解释功能,但您可以使用该功能分析查询并查看瓶颈在哪里。除了Jeen所说的,1)您的查询很奇怪,在哪里?在的where部分绑定了三个?那么,?

我正在寻找优化下面的查询,目前该查询需要大约1m 20秒,大约213500个三元组。我正在寻找任何关于该查询的优化建议

我知道Optional在这里占用了大部分时间,但是有没有其他选项可以获得类似的结果集

我还在图片中附上了我们的资源地图


通常没有有意义的方法来回答这个问题,因为性能将取决于您使用的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 .
               }
    }
  }