【问题标题】:JCR query - slow performance when using OR?JCR 查询 - 使用 OR 时性能变慢?
【发布时间】:2015-01-21 19:46:39
【问题描述】:

我有一个 JCR 查询,例如:

SELECT * FROM [my:nodetype] WHERE ISDESCENDANTNODE([/somepath]) OR (otherPath LIKE '/someotherpath')

它在 6 秒内执行。

otherPath 属性是一个多值字符串属性(只有两个对象设置了它)。 整个数据库中只有 7 个 my:nodetype 类型的节点

虽然两个单独的查询:

SELECT * FROM [my:nodetype] WHERE ISDESCENDANTNODE([/somepath])

还有

SELECT * FROM [my:nodetype] WHERE otherPath LIKE '/someotherpath'

在不到 1 毫秒的时间内执行。第一个查询运行这么慢有什么原因吗?也许有可能像 SQL 数据库一样在 Jackrabbit 中看到查询计划?如何调试问题?

我无法想象为什么总共搜索 7 个节点,无论搜索条件如何都会产生 7 秒的查询运行时间...

【问题讨论】:

  • 我猜你用的是 Jackrabbit Oak,对吧?这是 SQL-2 优化器的限制。如果您使用 XPath,它应该可以正常工作。啊,抱歉,您不能在 XPath 中编写该查询......所以我没有选择,抱歉。您可以使用“联合”(它不是 JCR 规范的一部分,但适用于 Oak)。
  • 实际上我使用的是包含在 magnolia cms 中的普通 jackrabbit,我认为那里不支持“union”。
  • 好的,那么它可能是 Jackrabbit 2.x。那么我想运行两个查询是你唯一的解决方案。
  • 它的 IDESCENDANTNODE 会减慢速度。就像其他人所说的那样,避免它或通过在查询之外使用多个查询/xpath/检查路径来解决它。

标签: jackrabbit jcr


【解决方案1】:

这是 Jackrabbit 中的一个已知错误。我不确定,但我认为它在最新版本的 Jackrabbit 中仍未得到纠正。

这没什么可做的,你必须使用两个查询。

【讨论】:

    猜你喜欢
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2019-04-04
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多