У меня есть простой запрос SPARQL, который ищет общие узлы в графе, используя аргументы Filter
и Union
. Запрос занимает необычно много времени для компиляции. Я надеялся увидеть, возможно ли это перестроить структурно, чтобы повысить его производительность.
Разделяемые узлы - это любые из трех типов
- общий для двух объектов
- делится между двумя субъектами, а
- объект одной тройки, а объект другой.
Я предоставил график возможных данных в другой вопрос Я задал.
Запрос выглядит так:
"""SELECT DISTINCT ?b
WHERE{
{
?b ?p1 ?a.
?b ?p2 ?c.
filter(?a != ?c).
}
UNION
{
?a ?p1 ?b.
?c ?p2 ?b.
filter(?a != ?c).
}
UNION
{
?a ?p1 ?b.
?b ?p2 ?c.
filter(?a != ?c).
}}
"""
С тех пор, как я это опубликовал, я провел несколько экспериментов и узнал, что самая трудоемкая часть - средняя.
{
?a ?p1 ?b.
?c ?p2 ?b.
filter(?a != ?c).
}