Microsoft SQL Server 2005/2008:XML与text / varchar数据类型

时间:2009-02-05 06:41:48

标签: sql-server xml database sql-server-2005 optimization

以XML类型而不是text / varchar / ntext存储XML更有意义(服务器端验证XML / schema / dtd除外)吗?我不打算在数据库端进行任何XML操作。

我调查的目的是减少数据库大小。为此,我可以将XML data type用于非类型化XML吗?有什么优点和缺点?

我找到article related to the topic,但我不确定作者的假设/结论是否正确。

4 个答案:

答案 0 :(得分:8)

如果将xml存储在xml类型的列中,则数据将不会作为简单文本存储,因为在nvarchar情况下,它将存储在某种解析数据树中,而后者将比未解析的数据树小。 xml版本。这不仅减少了数据库的大小,而且还为您提供了其他优点,例如验证,易于操作等等(即使您没有使用其中任何一个,但它们仍在供将来使用)。

另一方面,服务器必须在插入时解析数据,这可能会减慢数据库速度 - 你必须决定速度与大小。

修改

就我个人而言,我认为数据库中的数据只有在具有难以在关系模型中实现的结构时才应存储为xml,例如:布局,样式描述等。通常这意味着没有太多的数据和速度不是问题,因此添加了xml功能,如数据验证和操作能力(同样,最后但并非最不重要的,点击值的能力在管理工作室,看到格式化的xml - 我真的很喜欢这个功能!),超重成本。

我没有在数据库中存储大量xml的直接经验,如果我有选项,我不会这样做,因为它几乎总是比关系模型慢,但如果是这样的话,我建议分析这两个选项,并在最适合您需求的尺寸和速度之间进行选择。

答案 1 :(得分:7)

我的快速调查显示MS SQL 2005(Express Edition)

  

Microsoft SQL Server 2005 - 9.00.3073.00(英特尔X86)       2008年8月5日12:31:12       版权所有(c)1988-2005 Microsoft Corporation       Windows NT 6.0上的Express Edition(Build 6000:)

以大约70%的开销存储XML(可以更快地处理/解析)。

转换前的我的数据:rows = 160320,reserved = 178576 KB,data = 178184 KB,index_size = 272 KB,unused = 120 KB

转换后的我的数据:rows = 160320,reserved = 309702 KB,data = 307216 KB,index_size = 1672 KB,unused = 184 KB

因此,如果您没有计划在数据库端使用XML技术,那么将XML数据存储在XML数据类型中没有任何意义。

答案 2 :(得分:2)

我正在广泛使用xml与手持设备进行通信,并且在大多数所有存储过程中都使用XQuery来仅检索我需要的XML数据。它很棒!!我只是担心存储空间,因为只有十万条左右的记录,数据库大小为1到2 GB。我们希望能够存储数百万条用于记录和客户使用的记录。所以在看到空间使用方面的实际情况之前,它会令人担忧。

答案 3 :(得分:2)

使用XML数据类型来存储XML数据是有意义的,就像在MS SQL Server中处理UTF8到UTF18和反之亦然一样。