是否可以在SQL Server 2005/SQL Server 2008上的XML列中设置索引?

CAR*_*OTH 6 xml sql-server indexing sql-server-2005

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

<document>
    <item>
        ...
        <phoneNumber>0123456789</phoneNumber>
        ....
    </item>
    <item>
        ...
        <phoneNumber>9876543210</phoneNumber>
        ....
    </item>
    ...
</document>
Run Code Online (Sandbox Code Playgroud)

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

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

<document>
    <item>
        <firstName>Carlos</firstName>
        <lastName>Loth</lastName>
        <phoneNumber>0123456789</phoneNumber>
    </item>
    <item>
        <firstName>Alberto</firstName>
        <lastName>Tomatis</lastName>
        <phoneNumber>987654321</phoneNumber>
    </item>
</document>
Run Code Online (Sandbox Code Playgroud)

另一行包含此文档

<document>
    <item>
        <orderNumber>XYZ</orderNumber>
        <phoneNumber>0123456789</phoneNumber>
    </item>
    <item>
        <orderNumber>ABC</orderNumber>
        <phoneNumber>987654321</phoneNumber>
    </item>
</document>
Run Code Online (Sandbox Code Playgroud)

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

有什么建议或想法吗?

在此先感谢,Carlos Loth.

OMG*_*ies 2

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

有关详细信息,请参阅这篇 MSDN 文章

您需要先创建主 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
Run Code Online (Sandbox Code Playgroud)

创建 XML 索引文档

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