Optimization 在MarkLogic中优化SPARQL查询

Optimization 在MarkLogic中优化SPARQL查询,optimization,sparql,marklogic,Optimization,Sparql,Marklogic,在许多SPARQL系统中,可以通过在图形模式中对三元组重新排序来优化查询。在其他情况下,您不能(查询引擎使用自己的一些启发式方法对它们进行优化) 在Jena中,您可以通过在查询的早期放置最能限制结果集的三重模式来优化查询(并确保总是提到一些已经绑定的变量)。在其他查询引擎中,此策略不起作用(因为它们处理查询的方式不同) 显然,Marklogic SPARQL对三重模式的顺序很敏感(我重新安排了一些查询,发现它们的速度会更快或更慢,高达10倍)。但我找不到任何押韵或理由来解释序列的快慢。我在Jen

在许多SPARQL系统中,可以通过在图形模式中对三元组重新排序来优化查询。在其他情况下,您不能(查询引擎使用自己的一些启发式方法对它们进行优化)

在Jena中,您可以通过在查询的早期放置最能限制结果集的三重模式来优化查询(并确保总是提到一些已经绑定的变量)。在其他查询引擎中,此策略不起作用(因为它们处理查询的方式不同)

显然,Marklogic SPARQL对三重模式的顺序很敏感(我重新安排了一些查询,发现它们的速度会更快或更慢,高达10倍)。但我找不到任何押韵或理由来解释序列的快慢。我在Jena身上成功使用的启发法不适用于MarkLogic


我在谷歌上搜索并查看了MarkLogic文档,没有找到任何关于这方面的建议。MarkLogic查询引擎的作者对此有何评论?

我询问了MarkLogic内部PM和工程团队的专家。我被告知,“无论模式的顺序如何,您都应该获得相同的性能,因为我们有一个复杂的查询优化器。如果不是这样,请提交一个bug。”了解您使用的MarkLogic的特定版本、内容和一些示例查询也会很有用

优化级别向优化器提供一个提示,告诉它在寻找最佳查询计划上要花费多少时间。 任何优化器都会花费一些时间来寻找最佳计划,但必须平衡寻找该计划所花费的时间与使用最佳可能计划的好处。我们大多数人在现实生活中都经历过这种取舍(!)

优化级别1说“做一些工作寻找最佳计划,但不要发疯”。第二级说“做更多的工作来找到最好的计划”。级别0表示“按原样接受查询”


对于大多数查询,级别1是合适的,这是默认值。如果您有一个特别复杂的查询,请在第2级进行尝试,看看花费在查找计划以加快查询速度上的额外时间是否在整个查询时间中得到了回报。如果您有非常简单的查询,请尝试级别0。

“在许多SPARQL系统中,您可以通过在图形模式中对三元组重新排序来优化查询。”这实际上有点令人惊讶,如果是真的,因为它们应该是等价的。您是否发现了任何特定的模式(例如,较早地放置匹配较少的三元组会产生更快的结果)?SPARQL中唯一的要求是,无论查询的顺序如何,结果都是相同的。性能是一个完全不同的问题;虽然很轻。如果部分重新排序有两个同等重要的三重模式,它会使它们保持给定的顺序。Scott完全正确。但为了回答约书亚的问题,这里有一个简单的例子。我在为菲波做调查。此查询很慢(需要几秒钟):选择*WHERE{s a owl:Class。?p a owl:ObjectProperty。?p rdfs:domain?s。?此查询很快(需要眨眼):选择*WHERE{s a owl:Class。?p rdfs:domain?s。?p a owl:ObjectProperty。}它从不引入新变量(除非在开始时);这就产生了巨大的差异(跨产品和文件管理器与简单连接),我试图排版最后一条消息,但它删除了我所有的换行。我不知道如何解决这个问题。文档没有说明优化级别的作用,只是说“识别0(关闭)、1和2的级别。默认值为1”。应该使用哪一级别以及可以预期哪些类型的优化?