TDB上对Fuseki的SPARQL查询性能低下

TDB上对Fuseki的SPARQL查询性能低下,sparql,jena,fuseki,tdb,Sparql,Jena,Fuseki,Tdb,我已经使用tdbloader2大容量加载了wikidata转储。现在我正在尝试进行SPARQL查询。 这样的查询运行速度非常慢(不能在24小时内完成),尽管它可以在以下情况下工作: 前缀rdfs: 前缀wdt: 前缀wd: 选择?项目?属性?项目标签 哪里 { wd:Q5487302?属性?项目。 ?项目rdfs:标签?项目标签。 过滤器(LANG(?itemlab)=“LANG(?itemlab)=“en”)。 } 但是,它运行得非常快(不到5秒): 前缀rdfs: 前缀wdt: 前缀wd:

我已经使用tdbloader2大容量加载了wikidata转储。现在我正在尝试进行SPARQL查询。 这样的查询运行速度非常慢(不能在24小时内完成),尽管它可以在以下情况下工作:

前缀rdfs:
前缀wdt:
前缀wd:
选择?项目?属性?项目标签
哪里
{
wd:Q5487302?属性?项目。
?项目rdfs:标签?项目标签。
过滤器(LANG(?itemlab)=“LANG(?itemlab)=“en”)。
}
但是,它运行得非常快(不到5秒):

前缀rdfs:
前缀wdt:
前缀wd:
选择?项目?属性?项目标签
哪里
{
wd:Q5487302?属性?项目。
}
这也很快:

    PREFIX      rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX       wdt:  <http://www.wikidata.org/prop/direct/>
    PREFIX        wd:  <http://www.wikidata.org/entity/>
    SELECT ?item ?property ?itemLabel
    WHERE
    {
    ?item rdfs:label ?itemLabel.
    FILTER(LANG(?itemLabel) = "" || LANG(?itemLabel) = "en").
    } LIMIT 1000
前缀rdfs:
前缀wdt:
前缀wd:
选择?项目?属性?项目标签
哪里
{
?项目rdfs:标签?项目标签。
过滤器(LANG(?itemlab)=“LANG(?itemlab)=“en”)。
}限制1000

所以我不知道第一个查询有什么问题。

这个查询没有问题。首先,我确信三重模式
?itemrdfs:label?itemlab.
会产生非常大的中间结果。但是我想主要的问题可能是查询优化器的问题。你检查过这个了吗?否则,我还建议您在Jena用户邮件列表中询问。像安迪、罗布和亚当这样的开发人员通常回答得很快,而且确实可以提供帮助。事实上,Andy也在这里,所以他可能稍后会回复。与此同时,您可以运行
tdbquery--explain
工具来使用引擎盖下发生的事情。也许可以把它添加到问题中。有趣的是,将
wd:Q5487302?property?项
括在花括号中是否会有帮助……这是哪种版本的Jena Coooo?我在第一个查询中看到的唯一奇怪的事情是它是
?property
,我猜您正在使用默认的BGP优化。他们可能更喜欢
的rdfs:label
而不是
:uri?p
。尝试将文件“none.opt”放在TDB目录中,重新启动,看看会发生什么。Stanislav关于
{}
的建议也很好:尝试使用三重+过滤器
{wd:Q5487302?property?item.{item rdfs:label?itemLabel.filter(LANG(?itemLabel)=“LANG(?itemLabel)=“en”)}
谢谢。将“none.opt”包含在TDB目录中并将其放入TDB目录都有效。我认为我的问题是因为我使用优化器的方式。
    PREFIX      rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX       wdt:  <http://www.wikidata.org/prop/direct/>
    PREFIX        wd:  <http://www.wikidata.org/entity/>
    SELECT ?item ?property ?itemLabel
    WHERE
    {
    wd:Q5487302 ?property ?item.
    }
    PREFIX      rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX       wdt:  <http://www.wikidata.org/prop/direct/>
    PREFIX        wd:  <http://www.wikidata.org/entity/>
    SELECT ?item ?property ?itemLabel
    WHERE
    {
    ?item rdfs:label ?itemLabel.
    FILTER(LANG(?itemLabel) = "" || LANG(?itemLabel) = "en").
    } LIMIT 1000