BaseX Xquery优化
BaseX Xquery optimization
您好,我在 C++ 中使用 BaseX,我的查询性能有问题。我有一个包含 manny Xml 文件的数据库,但是有一个 xml 文件是从一个看起来像这样的 csv 文件导入的。
<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 的每个 mid
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" 是什么意思,您保留了多少条记录?太长可能意味着几秒或几分钟,也可能意味着 50 毫秒,因为它对您的用例来说太长了。提问时请具体一点。
接下来,您肯定永远不会使用属性索引,因为,好吧,您的 xml 中没有任何属性。您想要使用 文本索引。通常,在这种情况下,您的查询应由优化器重写以使用文本索引,但您可以确定,但请查看 BaseX GUI 中的 "Query Info" 视图。在编译步骤和生成的优化查询中,您应该看到使用索引的条目。如果您没有看到任何内容,则索引未被使用,因为出于某种原因优化器决定不使用或者您的索引可能不是最新的。你可以直接使用db:text。
但是,让我给您两个不相关的提示:首先,如果您担心性能,请不要使用 //
。这是后代或自身步骤,这意味着 BaseX 必须查看所有后代元素。相反,使用特定路径,即 doc('database')/records/record
.
另外,不要写$mid / hsn
。虽然它可能是有效的,但在路径运算符之间放置空格是非常不寻常的。相反,只需删除空格并编写 $mid/hsn
.
您好,我在 C++ 中使用 BaseX,我的查询性能有问题。我有一个包含 manny Xml 文件的数据库,但是有一个 xml 文件是从一个看起来像这样的 csv 文件导入的。
<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 的每个 mid
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" 是什么意思,您保留了多少条记录?太长可能意味着几秒或几分钟,也可能意味着 50 毫秒,因为它对您的用例来说太长了。提问时请具体一点。
接下来,您肯定永远不会使用属性索引,因为,好吧,您的 xml 中没有任何属性。您想要使用 文本索引。通常,在这种情况下,您的查询应由优化器重写以使用文本索引,但您可以确定,但请查看 BaseX GUI 中的 "Query Info" 视图。在编译步骤和生成的优化查询中,您应该看到使用索引的条目。如果您没有看到任何内容,则索引未被使用,因为出于某种原因优化器决定不使用或者您的索引可能不是最新的。你可以直接使用db:text。
但是,让我给您两个不相关的提示:首先,如果您担心性能,请不要使用 //
。这是后代或自身步骤,这意味着 BaseX 必须查看所有后代元素。相反,使用特定路径,即 doc('database')/records/record
.
另外,不要写$mid / hsn
。虽然它可能是有效的,但在路径运算符之间放置空格是非常不寻常的。相反,只需删除空格并编写 $mid/hsn
.