SQL Server中的XML数据列

时间:2012-03-06 15:03:21

标签: sql sql-server xml sql-server-2008-r2

使用SQL Server 2008 R2

我想创建一个包含以下列的表

[id] INT IDENTITY(1,1) NOT NULL,
[user_id] INT NOT NULL,
[date] DATE NOT NULL,
[timestamp] DATETIME NOT NULL,
[xml_data] XML NOT NULL

使用标识列上的主键和user_id上的非聚集索引以及涵盖xml_data和timestamp的日期。

但是,我注意到我无法将xml_data添加到索引中的INCLUDE语句中。悲伤的表情,因为当用户搜索user_id和date时,这将导致RID查找。

存储将要查询的xml数据的最佳方式是什么?

我认为我的选择是

  1. 坚持使用xml并拥有格式良好的数据,但请点击
  2. 使用具有未知利弊的VARCHAR(MAX)
  3. 使用具有未知利弊的VARBINARY(MAX)
  4. 注意:我怀疑我能否将字符串的长度限制为8000甚至。

2 个答案:

答案 0 :(得分:3)

如果您有XML - 将其存储为XML,主要有两个原因:

  • 它针对XML存储进行了优化 - 它存储为纯文本,它实际上是标记化的,并且比纯文本更有效地存储

  • 当XML存储为XML类型

  • 时,您实际上可以查询

但是:你不能只是索引这样的XML列。 SQL Server中的任何索引都可以是长度为900字节的最大 - XML列的大小最多可为2 GB。

如果要索引XML列,请查看XML Indexes in SQL Server 2005 - 它是一种单独的索引类型,旨在非常有效地处理XML查询。

加速XML查询的另一种方法是,通过从XML中提取该信息的存储函数,将经常查询到的XML的某些部分“显示”到父表中,然后存储它作为父表上的计算持久列。一旦它存储在那里,您可以像任何其他列一样查询它,您也可以将其编入索引!它仅适用于单个信息,但是(例如您订单中的OrderNumber - 您只有其中一个) - 它不能应用于数据集合。 / p>

答案 1 :(得分:0)

您可以使用XQuery查询xml字段。请参阅here