gpt4 book ai didi

sparql - SPARQL 查询中表达式的顺序

转载 作者:行者123 更新时间:2023-12-03 09:03:17 28 4
gpt4 key购买 nike

下面的两个查询有什么区别吗?

select distinct ?i 
where{
?i rdf:type <http://foo/bar#A>.
FILTER EXISTS {
?i <http://foo/bar#hasB> ?b.
?b rdf:type <http://foo/bar#B1>.
}
}


select distinct ?i
where{
FILTER EXISTS {
?i <http://foo/bar#hasB> ?b.
?b rdf:type <http://foo/bar#B1>.
}
?i rdf:type <http://foo/bar#A>.
}

性能或结果存在差异吗?

最佳答案

首先,您不需要FILTER EXISTS。您可以使用基本图形模式(一组常规三重模式)重写查询。但假设您正在使用 FILTER NOT EXISTS 或类似的东西。

结果

一般来说,order matters .

但是,自上而下的评估语义主要在OPTIONAL的情况下发挥作用,而这不是你的情况。因此,结果应该是相同的。

自上而下的评估语义可以被 bottom-up 覆盖评价语义。幸运的是,自下而上的语义doesn't prescribe首先从逻辑上评估 FILTER,尽管在​​ FILTER EXISTSFILTER NOT EXISTS 的情况下是可能的。

SPARQL 代数 representation两个查询相同:

(prefix ((rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>)
(foobar: <http://foo/bar#>))
(distinct
(project (?i)
(filter (exists
(bgp
(triple ?i foobar:B ?b)
(triple ?b rdf:type foobar:B1)
))
(bgp (triple ?i rdf:type foobar:A))))))

性能

简单地遵循自上而下的语义,引擎应该首先评估 ?i a foobar:A

  • 如果 ?i 只存在一个绑定(bind),那么您很幸运。
  • 如果 ?i 存在数百万个绑定(bind),而子模式则更具选择性,那么您就没那么幸运了。

幸运的是,优化器会尝试根据模式的选择性重新排序。然而,预测可能是错误的。

顺便说一句,rdf:type 谓词 is said to be Virtuoso 中的性能 killer 。

结果与性能

如果端点具有查询执行时间限制并在达到超时时刷新部分结果,结果可能会有所不同: an example .

关于sparql - SPARQL 查询中表达式的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828218/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com