【问题标题】:Is it possible to set an index inside a XML column on SQL Server 2005 / SQL Server 2008?是否可以在 SQL Server 2005 / SQL Server 2008 的 XML 列中设置索引?
【发布时间】:2011-01-13 15:30:33
【问题描述】:

我有一个将 xml 文档存储在 SQL Server 列中的应用程序。 XML 文档的结构类似于以下:

<document>
    <item>
        ...
        <phoneNumber>0123456789</phoneNumber>
        ....
    </item>
    <item>
        ...
        <phoneNumber>9876543210</phoneNumber>
        ....
    </item>
    ...
</document>

基本上,此列存储一组客户信息。 XML 文档的 元素内可以有不同的子元素,但其中一些子元素包含在所有文档中(例如,上例中的 元素)。

这样我可以在表格中的一行包含以下值

<document>
    <item>
        <firstName>Carlos</firstName>
        <lastName>Loth</lastName>
        <phoneNumber>0123456789</phoneNumber>
    </item>
    <item>
        <firstName>Alberto</firstName>
        <lastName>Tomatis</lastName>
        <phoneNumber>987654321</phoneNumber>
    </item>
</document>

还有包含此文档的另一行

<document>
    <item>
        <orderNumber>XYZ</orderNumber>
        <phoneNumber>0123456789</phoneNumber>
    </item>
    <item>
        <orderNumber>ABC</orderNumber>
        <phoneNumber>987654321</phoneNumber>
    </item>
</document>

那么,我的问题是,是否可以基于 document/item/phoneNumber 元素在该 XML 列上创建索引?我需要执行一个查询,根据 phoneNumber 信息返回存储在其他“固定已知”列中的信息。

有什么建议或想法吗?

提前致谢, 卡洛斯·罗斯。

【问题讨论】:

    标签: sql-server xml sql-server-2005 indexing


    【解决方案1】:

    是的。
    SQL Server 2005 支持四种不同类型的 XML 索引。由于 XML 索引与关系索引有些不同,因此在我们探讨如何使用它们以获得最大效率之前,有必要了解它们的实现。有一个“主 XML 索引”和三种不同风格的“辅助 XML 索引”。

    欲了解更多信息,请参阅this MSDN article

    您需要先创建一个主 XML 索引,然后才能定义辅助 XML 索引:

    CREATE PRIMARY XML INDEX xml_idx ON your_table(xml_column)
    CREATE XML INDEX xml_idx ON your_table(xml_column) FOR PROPERTY
    

    Create XML Index documentation

    【讨论】:

    • 谢谢,但是如何指定xml文档中的路径呢?
    • @Carlos Loth:您在整个 XML 列上定义了一个 XML 索引 - 您的所有 XML 都将被索引以用于属性、路径或值访问。您不能将索引限制为文档中给定的子 x 路径 - 这是全有或全无的事情。而且它使用了大量的磁盘空间!!
    • @Carlos:除了在列上创建索引之外,您还必须声明一个 XML 模式。 xml 索引将极大地帮助您改进使用 XPATH 和 XQUERY 对 XML 数据的查询。但是,如果您声明您的数据符合特定的 XML 模式,性能将会飙升,并且在这种情况下,XML 索引将包含更多关于您的数据的信息。
    • 我想知道是否可以在 XML 列中指定一个 XPath,以基于该 XPath 索引 xml 文档。因此,在我的例子中,我的 XML 文档将根据 phoneNumber 列进行索引。
    【解决方案2】:

    在 2008 年及更早的时候(即在最初提出这个问题时)不可能,但在 2012 年+,引入了选择性 xml 索引,允许您这样做 - 索引特定(一组)路径。

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多