【发布时间】:2016-04-27 17:49:03
【问题描述】:
我需要使用 Marklogic 8 按日期(上周、上个月等)过滤文档。数据库包含 130 万个 XML 文档。
文件如下所示:
<work datum_gegenereerd="2015-06-10" gegenereerd="2015-06-10T14:28:48" label="gmb-2015-12000">
...
我在 work/@datum_gegenereerd(标量类型日期)上创建了一个范围元素属性索引。
以下查询有效,但速度很慢(3 秒):
xquery version "1.0-ml";
for $a in //work
where xs:date($a/@datum_gegenereerd) > current-date()- 5*xs:dayTimeDuration('P1D')
return
<hit>{base-uri($a)}</hit>
经过大量试验,事实证明,通过从 where 语句中删除 xs:date 转换,我可以将性能降低到 0.02 秒。
xquery version "1.0-ml";
for $a in //work
where $a/@datum_gegenereerd > current-date()- 5*xs:dayTimeDuration('P1D')
return
<hit>{base-uri($a)}</hit>
谁能解释这种行为?
更新:
当我删除属性范围索引时,第二个变体的性能也下降到 3+ 秒。重新创建索引可以恢复性能。这让我想知道如何阅读下面大卫的声明,即无法使用普通 xquery 中的自定义索引。
(顺便说一句:该查询返回 1267 个 XML 文档,在 135 万个文档的总数据库中,可能有 450000 个具有根元素的文档)
更新 2:
我搞砸了 0.02 秒的性能指标。但在查询控制台中速度非常快。在 3 个版本中,cts-search 似乎快了一点。
【问题讨论】:
-
由于您的查询只需要 URI,您能否告诉我们 cts:uris 查询的执行情况?
-
您应该能够在查询控制台的“配置文件”选项卡中确定速度差异以及性能命中的位置。
标签: marklogic