我想知道在SPARQL中有意义时如何延迟子查询的评估。我正在使用wikidata SPARQL。
让我们以这个示例为例,该示例试图获取美国电影及其首次发行日期。这是常识子查询的外观。但是,此查询可能会超时,因为它将尝试获取所有电影的最短发布日期,而不知道影片仅限于美国影片。
select *
where{
#films
?film wdt:P31 wd:Q11424.
#films with America as country of origin
?film wdt:P495 wd:Q30.
{
#minimum publication date
select ?film (min (?pubDate) as ?minPubDate)
where{
?film wdt:P577 ?pubDate.
}
group by ?film
}
}
尽管如此,以下将内部约束推入内部的查询还是可以做到的。
select *
where{
#films
?film wdt:P31 wd:Q11424.
#films with America as country of origin
?film wdt:P495 wd:Q30.
{
#minimum publication date
select ?film (min (?pubDate) as ?minPubDate)
where{
#films
?film wdt:P31 wd:Q11424.
#films with America as country of origin
?film wdt:P495 wd:Q30.
?film wdt:P577 ?pubDate.
}
group by ?film
}
问题: 我知道在这种情况下,更改查询的结构可能会解决性能问题。但是,有没有更系统的方法来重组查询或告诉:嘿,子查询!不必担心获得所有结果,您可以满足需要的部分!