Одна из оптимизаций, выполняемых JenaARQ, заключается в следующем: «Поместите фильтры близко к месту, где определены их переменные зависимости».
Это приводит к тому, что следующий план запроса:
(filter (exprlist (|| (|| (isIRI ?Y) (isBlank ?Y)) (!= (datatype ?Y) <http://example.com/onto/rdf#structure>)) (|| (|| (isIRI ?Z) (isBlank ?Z)) (!= (datatype ?Z) <http://example.com/onto/rdf#structure>))) (bgp (triple ?X <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Student>) (triple ?Y <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Faculty>) (triple ?Z <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Course>) (triple ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#advisor> ?Y) (triple ?Y <http://swat.cse.lehigh.edu/onto/univ-bench.owl#teacherOf> ?Z) (triple ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#takesCourse> ?Z) )))
преобразуется в следующее:
(sequence (filter (|| (|| (isIRI ?Z) (isBlank ?Z)) (!= (datatype ?Z) <http://example.com/onto/rdf#structure>)) (sequence (filter (|| (|| (isIRI ?Y) (isBlank ?Y)) (!= (datatype ?Y) <http://example.com/onto/rdf#structure>)) (bgp (triple ?X <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Student>) (triple ?Y <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Faculty>) )) (bgp (triple ?Z <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Course>)))) (bgp (triple ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#advisor> ?Y) (triple ?Y <http://swat.cse.lehigh.edu/onto/univ-bench.owl#teacherOf> ?Z) (triple ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#takesCourse> ?Z) )))
Оказывается, что в то время как исходный план запроса выполняется в миллисекундах «Оптимизированный» план запроса занимает около 7 часов.
Рассматривает ли JenaARQ статистику для оптимизации размещения фильтра в плане запроса?
Я использую Jena 3.12.0.