繁体   English   中英

BaseX Xquery优化

[英]BaseX Xquery optimization

您好,我在C ++中使用BaseX,但查询性能存在问题。 我有一个包含Manny Xml文件的数据库,但是例如有一个从csv文件中导入的xml文件,看起来像那样。

<record>
  <hsn>0005</hsn>
  <tsn>486</tsn>
  <factorycode>BMW 3/1</factorycode>
  <description>318I</description>
  <power>83</power>
  <cubiccapacity>1796</cubiccapacity>
  <typeapprovaldate>19910701</typeapprovaldate>
  <xxx>1</xxx>
  <mid>BMW00737</mid>
</record>

我有一个简单的查询语句,用相同的hsn和tsn查找每个中间

for $mid in doc('database')//record
where $mid / hsn = '0005' and $mid / tsn = '404'
return $mid/mid

问题是,这需要很长时间,因为xml文件包含许多记录。

有没有一种方法可以优化我的查询或xml文件? 我认为属性索引可以工作,但是我不知道如何在数据库中使用它http://docs.basex.org/wiki/Indexes

首先,“ to long”是什么意思,您保留多少记录? 太长可能意味着数秒或数分钟,或者可能意味着50ms,因为对于您的用例而言太长了。 问问题时请更具体。

接下来,您肯定将永远不会使用属性索引,因为好吧,您的xml中没有任何属性。 您要使用Text索引 通常,在这种情况下,您的查询应由优化程序重写以使用文本索引,但是您可以确保仅查看BaseX GUI中的“查询信息”视图。 在编译步骤和产生的优化查询中,您应该看到使用索引的条目。 如果您什么都看不到,则不使用索引,因为出于某种原因,优化器决定不这样做,或者您的索引不是最新的。 您可以直接使用db:text

但是,让我给您两个不相关的提示:首先,如果您担心性能,请不要使用// 这是一个后代或自身步骤,这意味着BaseX必须查看所有后代元素。 而是使用特定路径,即doc('database')/records/record

另外,不要写$mid / hsn 尽管这可能是有效的,但在路径运算符之间放置空格是非常不常规的。 相反,只需删除空格并写入$mid/hsn

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM