Joe*_*eky 14 schema sql-server-2008 xml database-design datatypes
我正在使用 SQL Server 2008 为一组新资源定义架构...在这种情况下,每条记录(例如行)都需要存储 XML 片段。时; 虽然不经常;我需要查询 XML 以查找元素和属性值。如果留给我自己的设备,我会倾向于使用XML数据类型,尽管我一直认为这是有问题的。所以这让我想到了我的问题。
鉴于这种情况,在尝试决定将 XML 存储在XML列中还是varchar(MAX)列中时,我应该考虑哪些因素
如果有帮助……这里有一些额外的细节:
Sol*_*zky 14
哪些因素应该我想在存储XML之间做出选择时,可以考虑
xml
柱与一varchar(MAX)
列
这些因素是:
该XML
类型可通过 XQuery 表达式查询/解析,包括能够使用FLWOR 语句和迭代
在数据XML
变量和列可以内嵌经由使用XQuery表达式来修改XML DML。
XML
数据存储为 UTF-16 LE(Little Endian),因此VARCHAR(MAX)
将是一个糟糕的选择,因为它可能导致数据丢失。因此,真正的决定应该在XML
和之间NVARCHAR(MAX)
,因为NCHAR
/NVARCHAR
也是 UTF-16 LE。
XML
可以针对 XSD / 验证数据XML SCHEMA COLLECTION
。如果未指定 XML 架构集合,则不进行验证(在确保格式良好之外),但在使用NVARCHAR(MAX)
.
XML类型的一个主要好处是,它是存储在一个高度优化的格式(不VARBINARY(MAX)
作为陈述@奥列格的答案),不存储精确的字符串表示你看到的,而是具有元素的字典和属性的名称和指通过他们的 ID 发给他们。它还删除空格。请尝试以下操作:
DECLARE @Test1 XML = N'<Test><TagName>1</TagName><TagName>2</TagName></Test>';
DECLARE @String1 NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX), @Test1);
SELECT DATALENGTH(@Test1) AS [XmlBytes],
LEN(@String1) AS [StringCharacters],
DATALENGTH(@String1) AS [StringBytes];
SET @Test1 = N'<Test><TagName>1</TagName><TagName>2</TagName><TagName>3</TagName>
<TagName>4</TagName><TagName>5</TagName><TagName>6</TagName></Test>';
SET @String1 = CONVERT(NVARCHAR(MAX), @Test1);
SELECT DATALENGTH(@Test1) AS [XmlBytes],
LEN(@String1) AS [StringCharacters],
DATALENGTH(@String1) AS [StringBytes];
Run Code Online (Sandbox Code Playgroud)
返回:
XmlBytes StringCharacters StringBytes
56 53 106
XmlBytes StringCharacters StringBytes
84 133 266
Run Code Online (Sandbox Code Playgroud)
正如您在上面的示例输出中所见,添加四个元素(#s 3、4、5 和 6)VARCHAR
会向NVARCHAR
变量添加 80 个字符(因此如果使用 则为 80 个字节)和 160 个字节。然而,它只向 XML 变量添加了 28 个字节,这比它添加的要少VARCHAR
(以防有人会争论支持VARCHAR
over,XML
因为XML
UTF-16 是 [主要] 双字节)。这种优化可以节省大量空间,这本身就是使用XML
数据类型的充分理由。
XML 数据可以通过专门的XML 索引建立索引
如果sql server xml 功能会发生针对 XML 的查询,则使用 XML 类型来存储 xml 以避免强制转换
和
请记住,由于 xml 验证,XML 类型的存储速度可能会慢一点,但 XML 的底层类型是普通的 varbinary(max)
归档时间: |
|
查看次数: |
13450 次 |
最近记录: |