为什么更改此SPARQL问题中的限制会使查询产生服务器错误?

时间:2019-07-25 08:42:44

标签: sparql wikidata

在query.wikidata.org上通过SPARQL查询有关1900年代或以后在瑞典出生的人的信息,其中有3个以上的附加链接目前在35 s内得出了6746个结果。由于路径P19 / P131 * / P17?复杂,因此运行时间很长。

SELECT DISTINCT ?person ?dob ?linkcount WHERE {
    ?person wdt:P31 wd:Q5.
    ?person wdt:P19/wdt:P131*/wdt:P17? wd:Q34.
    ?person wdt:P569 ?dob.
    FILTER(datatype(?dob)=xsd:dateTime
           && ?dob >= "1900-01-01T00:00:00"^^xsd:dateTime).
    ?person wikibase:sitelinks ?linkcount. hint:Prior hint:rangeSafe true. # hint:Prior hint:runLast true.
    FILTER(?linkcount > 3).
}

(尝试here。)

如果我将链接计数限制从3更改为30,我会在一段时间后收到服务器错误消息。这个怎么可能?我期望大约在同一时间获得较小的结果。

我能想到的唯一原因是优化器错误地认为,由于站点链接数量的限制越来越严格,因此首先获取具有30个以上站点链接的所有对象是有意义的。 (我不知道如何检验该假设。我为该查询创建了一个“ /bigdata/namespace/wdq/sparql?explain&query=”链接,但没有结果。(请注意,我没有从没有超时的查询中受益,不能正常工作,但出现服务器错误。优化程序运行时是否发生了不好的事情?)

然后,我激活了示例中已注释掉的hint:runLast提示,以便有关站点链接的部分最后完成。使用?linkcount > 3的时间大约与以前相同,但是使用?linkcount > 30的版本仍然会导致服务器错误。

我认为过滤器将在最后测试,以便无论如何都要构建完整列表,并为所有这些对象检索网站链接的数量,然后无论限制如何,过滤都应花费相同的时间。这显然是错误的。这里到底发生了什么?

0 个答案:

没有答案