如何通过控制查询执行顺序使Virtuoso上的SPARQL查询更快?

如何通过控制查询执行顺序使Virtuoso上的SPARQL查询更快?,sparql,freebase,virtuoso,openlink-virtuoso,Sparql,Freebase,Virtuoso,Openlink Virtuoso,我已经建立了一个Virtuoso服务器来托管Freebase数据;我真的很感激你 让我们考虑一下这个场景:找到最大的位置,可能是一个县,在威斯康星州FB:M.0824R中用VAR1表示,在哪里?VAR1包含至少一个由VAR2表示的位置,类型为FB:PosithION-YouthOrthys/ 我编写了SPARQL查询,如下所示: PREFIX fb: <http://rdf.freebase.com/ns/> SELECT DISTINCT ?var1 ?var2 ?v2_name

我已经建立了一个Virtuoso服务器来托管Freebase数据;我真的很感激你

让我们考虑一下这个场景:找到最大的位置,可能是一个县,在威斯康星州FB:M.0824R中用VAR1表示,在哪里?VAR1包含至少一个由VAR2表示的位置,类型为FB:PosithION-YouthOrthys/

我编写了SPARQL查询,如下所示:

PREFIX fb: <http://rdf.freebase.com/ns/> 
SELECT DISTINCT ?var1 ?var2 ?v2_name WHERE {
             fb:m.0824r  fb:location.location.contains  ?var1 . 
             ?var1       fb:location.location.contains  ?var2 . 
             ?var2       fb:type.object.type            fb:location.place_with_neighborhoods . 
             ?var1       fb:location.location.area      ?area .
  OPTIONAL { ?var2       fb:type.object.name            ?v2_name } .
} ORDER BY DESC(?area) 
LIMIT 1
不幸的是,Virtuoso引擎在一个多小时内未能返回查询结果

我尝试了一些简单的查询,可以在不到一秒钟的时间内生成结果:

PREFIX fb: <http://rdf.freebase.com/ns/> 
SELECT DISTINCT ?var1 ?var2 ?v2_name WHERE {
             fb:m.0824r  fb:location.location.contains  ?var1 . 
             ?var1       fb:location.location.contains  ?var2 . 
             ?var2       fb:type.object.type            fb:location.place_with_neighborhoods . 
  OPTIONAL { ?var2       fb:type.object.name            ?v2_name } .    
}
# Remove the area-related information with ?var1
# Returns ONLY ONE result in 0.05s.
以及

考虑到这些简单查询的结果,我真的很困惑哪一步会带来性能问题。有谁能给我一些建议吗?非常感谢你

如图纸所示-

当查询的其余部分没有生成解决方案时,似乎存在查询计划问题,并带有OPTIONAL,因为只从初始查询中删除该子句

删除?var1 fb:location.location.area?区域模式,从而删除ORDER BY DESC?区域,这也是将解决方案设置为零的原因

这一问题将随着发展而提出,供他们分析


由于删除具有此属性的三重模式时返回的单个结果与fb:location.location.area没有关系,因此结果将为空。唯一的财产http://rdf.freebase.com/ns/m.05_jhl 是fb:location.location.contains属性。删除可选,启用&explain=on。@AKSW是的,你是对的,我从未找到这一点!所以问题变得更有趣了:当查询显然应该返回空的时候,virtuoso怎么能在那里停留这么长时间呢?@StanislavKralin真棒!这个查询在删除之后工作,我真的很好奇为什么。我在哪里可以设置&explain=on?您可以看到如何分析查询,但老实说,对于非用户体验的用户resp来说,这很难理解。开发商但是您可以将输出附加到邮件列表线程或Github问题中
PREFIX fb: <http://rdf.freebase.com/ns/> 
SELECT DISTINCT ?var1 ?var2 ?v2_name ?area WHERE {
             fb:m.0824r  fb:location.location.contains  ?var1 . 
             ?var1       fb:location.location.contains  ?var2 . 
             ?var1       fb:location.location.area      ?area .
  OPTIONAL { ?var2       fb:type.object.name            ?v2_name } .
}
# Remove the type limitation of ?var2
# Returns ~7000 results in ~1s.