1

我必须在我的 XML 类型列中搜索邮政编码。我在我的表上创建了一个主 XML 索引。

我正在关注这篇文章以了解这些概念。

我的查询看起来像这样

select *some fields* from table_name where
[xml_column].exist(''/Session/Entries/Entry[@DataItemId="Address.Postcode" and contains(upper-case(.), "@Postcode")]'') = 1

@Postcode 是输入参数,用户可以输入完整或部分邮政编码

现在根据链接,

如果您的工作负载在 XML 列上大量使用路径表达式,则 PATH 二级 XML 索引可能会加快您的工作负载。最常见的情况是在Transact-SQL 的 WHERE 子句中对 XML 列使用 exists() 方法。

但后来我对以下陈述有点困惑

如果您的工作负载使用路径表达式从单个 XML 实例中检索多个值,则在 PROPERTY 索引中的每个 XML 实例中聚类路径可能会有所帮助。此场景通常发生在属性包场景中,此时已获取对象的属性并且其主键值已知。

exist()在我的子句中使用方法,where但我返回多条记录。

我很困惑我应该根据我的查询创建哪个二级索引。我更倾向于房地产指数。

我可以创建所有 3 个并让 SQL 处理选择哪一个吗?这会增加节点表的大小并妨碍数据库的速度吗?

我的部分 XML 看起来像这样

<Session>
<Entries>    
<Entry DataItemId="AccountNumber" Type="Pattern" Source="SessionStore">
      <Value>212312311</Value>
    </Entry>
    <Entry DataItemId="SortCode" Type="Pattern" Source="SessionStore">
      <Value>10-20-30</Value>
    </Entry>
    <Entry DataItemId="AccountName" Type="Free" Source="SessionStore">
      <Value>XXXXXXXXX</Value>
    </Entry>
    <Entry DataItemId="Let" Type="Set" Source="SessionStore">
      <Value>LET</Value>
    </Entry>
    <Entry DataItemId="Relative" Type="Boolean" Source="SessionStore">
      <Value>False</Value>
    </Entry>
    <Entry DataItemId="LtdCompany" Type="Boolean" Source="SessionStore">
      <Value>False</Value>
    </Entry>
    <Entry DataItemId="Address.Postcode" Type="Pattern" Source="SessionStore">
      <Value>GL8 1TT</Value>
    </Entry>
    <Entry DataItemId="Address.Line1" Type="Free" Source="SessionStore">
      <Value>Askdaskdaoiksd</Value>
    </Entry>
    <Entry DataItemId="Address.Line2" Type="Free" Source="SessionStore">
      <Value>Ojasuiodjaisjdsa</Value>
    </Entry>
    <Entry DataItemId="PropertyType" Type="Set" Source="SessionStore">
      <Value>DH</Value>
    </Entry>
    <Entry DataItemId="Tenure" Type="Set" Source="SessionStore">
      <Value>1</Value>
    </Entry>
    <Entry DataItemId="BuiltThisYear" Type="Boolean" Source="SessionStore">
      <Value>False</Value>
    </Entry>
    <Entry DataItemId="YearBuilt" Type="Integer" Source="SessionStore">
      <Value>1960</Value>
    </Entry>
    <Entry DataItemId="StdConstruction" Type="Boolean" Source="SessionStore">
</Entries>
</Session>

更新

我做了更多的挖掘工作,然后与我的高级 DBA 朋友聊天,他建议我创建一个 PATH 索引。查询似乎比以前更快。

4

0 回答 0