使用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数据的最佳方式是什么?
我认为我的选择是
注意:我怀疑我能否将字符串的长度限制为8000甚至。
答案 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。