gpt4 book ai didi

xquery - 如何通过 Xquery 映射调整我的组?

转载 作者:行者123 更新时间:2023-12-02 08:24:11 25 4
gpt4 key购买 nike

忙于将 SQLServer 2008 R2 和 MarkLogic 8 与简单的个人实体进行比较。我的数据集适用于 100 万条记录/文档。注意:两个数据库都在同一台机器上(本地主机)。

以下 SQLServer 查询瞬间准备就绪:

set statistics time on 

select top 10 FirstName + ' ' + LastName, count(FirstName + ' ' + LastName)
from [Person]
group by FirstName + ' ' + LastName
order by count(FirstName + ' ' + LastName) desc

set statistics time off

结果是:

Richard Petter  421
Mark Petter 404
Erik Petter 400
Arjan Petter 239
Erik Wind 237
Jordi Petter 235
Richard Hilbrink 234
Mark Dominee 234
Richard De Boer 233
Erik Bakker 233

SQL Server Execution Times:
CPU time = 717 ms, elapsed time = 198 ms.

然而,MarkLogic 8 上的 XQuery 慢得多:

(                               
let $m := map:map()
let $build :=
for $person in collection('/collections/Persons')/Person
let $pname := $person/concat(FirstName/text(), ' ', LastName/text())
return map:put(
$m, $pname, sum((
map:get($m, $pname), 1)))
for $pname in map:keys($m)
order by map:get($m, $pname) descending
return
concat($pname, ' => ', map:get($m, $pname))
)[1 to 10]
,
xdmp:query-meters()/qm:elapsed-time

结果是:

Richard Petter => 421
Mark Petter => 404
Erik Petter => 400
Arjan Petter => 239
Erik Wind => 237
Jordi Petter => 235
Mark Dominee => 234
Richard Hilbrink => 234
Erik Bakker => 233
Richard De Boer => 233

elapsed-time:PT42.797S

198 毫秒与 42 秒在我看来差别很大。XQuery 正在根据本指南使用 map 进行分组:https://blakeley.com/blogofile/archives/560/

我有两个问题:

  • XQuery 是否可以以任何方式调整以获得更好的性能?
  • 带有 group by 的 XQuery 3.0 是否已经可以在 MarkLogic 8 上使用?

感谢您的帮助!

最佳答案

正如@wst 所说,您当前实现的挑战在于它加载所有文档以提取名字和姓氏,将它们一一相加,然后报告前十名。与其这样做,不如使用索引。

假设您在 FirstName 和 LastName 上设置了字符串范围索引。在那种情况下,你可以运行这个:

xquery version "1.0-ml";

for $co in
cts:element-value-co-occurrences(
xs:QName("FirstName"),
xs:QName("LastName"),
("frequency-order", "limit=10"))
return
$co/cts:value[1] || ' ' || $co/cts:value[2] || ' => ' || cts:frequency($co)

这使用索引在同一文档中查找名字和姓氏。 cts:frequency 表示同现发生的频率。这都是索引驱动的,所以会很快。

关于xquery - 如何通过 Xquery 映射调整我的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33745190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com