首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BaseX Xquery优化

BaseX Xquery优化
EN

Stack Overflow用户
提问于 2017-09-26 07:14:33
回答 1查看 380关注 0票数 0

你好,我在BaseX中使用C++,并且对查询的性能有问题。我有一个带有manny Xml文件的数据库,但例如,有一个从csv文件导入的xml文件,它看起来像这样。

代码语言:javascript
复制
<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查找每一个中间。

代码语言:javascript
复制
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中使用它

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-26 20:29:59

首先,你所说的“长”是什么意思?你保存了多少张记录?太长可能意味着多秒或多分钟,也可能意味着50 as,因为它对您的用例来说太长了。在提出问题时,请更加具体。

接下来,您肯定不会使用属性索引,因为xml中没有任何属性。您希望使用文本索引。通常,您的查询应该由优化器重写,以便在本例中使用文本索引,但您可以确保查看BaseX GUI中的“查询信息”视图。在编译步骤和结果的优化查询中,您应该看到使用索引的条目。如果您没有看到任何内容,则不会使用该索引,因为出于某种原因,优化器决定不使用该索引,或者您的索引没有更新。您可以直接使用db:案文

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46419972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档