Нам нужен запрос SPARQL, чтобы найти общие суперклассы для двух сущностей Викиданных. Я попробовал это так:
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". }
}
Вот прямая ссылка на запрос.
Это всегда истекает, даже с закомментированной строкой SERVICE
.
Однако, когда я выполняю один и тот же запрос только с одним из предложений WHERE, он выполняется очень быстро, давая либо 130, либо 12. Результаты
Почему он намного медленнее с обоими предложениями WHERE? Теоретически, база данных может просто выполнить оба предложения WHERE по отдельности, а затем выполнить INTERSECT, то есть доставить те результаты, которые произошли в обоих запросах.
Если это является недостатком в разработке механизма SPARQL, то какможно адаптировать запрос, чтобы он работал быстрее?