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

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

我有一个应用程序将 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 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

关于sql-server - 是否可以在 SQL Server 2005/SQL Server 2008 的 XML 列中设置索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209456/

相关文章:

sql - 从 VB.NET 调用存储过程的问题

sql-server - 使用左连接在单个更新语句中更新多个表

Python Minidom XML 解析点四边形/嵌套子元素

sql - SQLSERVER 中的 ListAGG

mysql - 将 .bak 导入 MySQL (.sql)

c# - 执行插入更新命令时从 SQL Server 搜索数据时出现超时问题

xml - 在 shell 中为 txt.txt 文件的每行创建新的文本文件

java - 如何使用 DOM 解析器按 XML 中的名称访问子节点?

sql - COUNT SQL 函数的性能

.net - 跟踪对数据库行的更改 (SQL Server)