我应该选择哪种XML索引?

时间:2015-10-13 08:31:31

标签: tsql sql-server-2012 xmlindex

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

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

我的查询看起来像这样

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中检索多个值   实例通过使用路径表达式,在每个XML中聚类路径   PROPERTY索引中的实例可能会有所帮助。通常这种情况   当对象的属性是属性包场景时发生   获取并且其主键值已知。

我在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索引。查询似乎比以前更快。

0 个答案:

没有答案