BaseX(XQuery)中的不同节点占用的时间太长

BaseX(XQuery)中的不同节点占用的时间太长,xquery,basex,Xquery,Basex,我试图获取一个大文件中所有不同的start元素/products/p:category/start节点。我写了一个查询,如下所示。要取得结果需要很长时间。我正在附加查询信息和XML文件 运行了几分钟后,我停止了执行 查询正在尝试获取所有不同的开始元素。有3个拉丁美洲和加勒比海地区类别元素 declare namespace functx = "http://www.functx.com"; declare namespace p="a:b:c"; declare function functx

我试图获取一个大文件中所有不同的start元素
/products/p:category/start
节点。我写了一个查询,如下所示。要取得结果需要很长时间。我正在附加查询信息和XML文件

运行了几分钟后,我停止了执行

查询正在尝试获取所有不同的开始元素。有3个拉丁美洲和加勒比海地区类别元素

declare namespace functx = "http://www.functx.com";
declare namespace p="a:b:c";

declare function functx:is-node-in-sequence( 
  $node as node()? , 
  $seq as node()* 
)  as xs:boolean {
  some $nodeInSeq in $seq satisfies deep-equal($nodeInSeq,$node)
};

declare function functx:distinct-nodes( 
  $nodes as node()*
) as node()* {
  for $seq in (1 to count($nodes))
  return $nodes[$seq]
         [not(functx:is-node-in-sequence(.,$nodes[position() < $seq]))]} ;

let $diff_starts := functx:distinct-nodes(/products/p:category/start)
return $diff_starts 
声明命名空间functx=”http://www.functx.com";
声明命名空间p=“a:b:c”;
声明函数functx:是序列中的节点(
$node作为node(),
$seq作为节点()*
)as xs:boolean{
$seq中的一些$nodeInSeq满足深度相等($nodeInSeq,$node)
};
声明函数functx:不同的节点(
$nodes作为节点()*
)作为节点()*{
对于$seq in(1到计数($nodes))
返回$nodes[$seq]
[not(functx:is节点在序列中(,$nodes[position()<$seq]))];
让$diff_start:=functx:distinct节点(/products/p:category/start)
返回$diff_开始
如果您需要更多详细信息,请告诉我


将相当多的节点与FunctX提供的功能进行比较非常昂贵,而且远远超出了与项目数量成线性关系的成本

FunctX通常是一个整洁的库,但通常不能很好地扩展现有的大数据(尽管XML数据库可以很好地处理大得多的数据而不会出现问题)

在这个查询中,我首先在线性时间内获取所有不同的值(在节点查找的数量中;用于获取不同的值),然后对所有节点进行另一次线性扫描,以获取每个值的第一个结果节点。我的笔记本电脑上的总执行时间约为700毫秒

declare namespace p="a:b:c";
for $date in distinct-values(/products/p:category/start)
return (/products/p:category/start[. eq $date])[1]