在哪里可以找到 SPARQL 查询的不同计划?

Where can I find different plans of a SPARQL query?

提问人:Khan 提问时间:10/24/2023 更新时间:10/31/2023 访问量:38

问:

我想尽可能多地查看 SPARQL 查询的计划。也就是说,我不仅想要优化的计划,还想要所有可能的计划,或者至少是一些计划,例如查询 q1 的 p1,p2,p3,p4。使用 Apache Jena 或任何其他此类工具,可能吗?我想尝试查询的所有查询计划,并想查看执行时间。

sparql rdf 耶拿 sql 执行计划

评论

1赞 UninformedUser 10/25/2023
Afaik Jena 不会生成多个计划,而是基于重新排序规则和启发式以及大量转换规则(例如过滤器推送等)的单个计划。

答:

1赞 RobV 10/31/2023 #1

@UninformedUser在他们的评论中非常正确,即耶拿默认生成一个计划。

但是,从理论上讲,可以通过打开/关闭控制使用哪些优化的所有优化器标志来找到耶拿可以生成的所有可能计划。

OptimizerStd 中,每个可能的优化都由上下文符号启用/禁用。因此,您可以生成启用/禁用配置符号的不同组合的对象,并使用不同的 创建优化器的实例,并查看生成的代数有何不同。有很多可能的优化,所以你可能不想考虑每一个可能的标志组合,也许从尝试一些更明显的标志开始,比如 和 。您可能需要进一步浏览代码以查看实际实现,以了解每个标志控制的潜在优化。ContextContextARQ.optFilterPlacementARQ.optIndexJoinStrategyTransform

请注意,您首先需要将 SPARQL 字符串解析为 Jena 对象,然后使用 Algebra.compile(Query) 将其编译为代数。如果你对代数的四边形感兴趣,你还需要 Algebra.toQuadForm(Op)Query