我们需要一个SPARQL查询来找到两个Wikidata实体的公共超类。我这样尝试过:
select ?commonBase #?commonBaseLabel
where {
wd:Q39798 wdt:P31/wdt:P279* ?commonBase.
wd:Q26868 wdt:P31/wdt:P279* ?commonBase.
#SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
Here's到查询的直接链接。
即使注释了SERVICE
这行,也总是超时。
但是,当我仅使用WHERE子句之一运行同一查询时,它运行速度非常快,产生130或12个结果。
为什么两个WHERE子句都这么慢?从理论上讲,数据库可以只分别执行两个WHERE子句,然后执行INTERSECT,即传递在两个查询中都发生过的结果。
如果这是SPARQL引擎设计中的缺陷,那么如何调整查询以使其运行更快?