sql - 我应该将 XML Blob 放入单独的表中吗?

标签 sql sql-server-2008 database-design

我正在设计一个包含大量记录的事务表。它将有大量的读写。

用户会在某一时刻上传 XML 文件,我将其存储在 XML 类型的数据库列中。

对于给定的交易记录,此 XML 将不会像其他所有内容一样经常被需要。它可能只会被读取几次,并且通常只会被插入而不被更新。

我想知道将此 XML 字段存储在单独的表中是否有任何优势。然后,我可以只在需要时加入它。我认为唯一的优势是“主”表上的单个记录占用的空间更少。但是,如果我的表已正确编入索引,那真的重要吗?

我怀疑我对此考虑过度,对我的优化还为时过早。我应该只将 XML 字段留在主表上吗?

我有一个示例 XML 文件是 12KB。我不希望它变得比这大得多。我不确定 SQL Server 的 XML 数据类型是否会比这更有效地存储信息。

澄清一下,这是一对一的关系。每笔交易都会有一个 XML blob。不会有一个 XML blob 用于多个事务。而且每个交易都应该最终得到一个 XML blob,即使它不是即时的。

谢谢, 泰德兹

最佳答案

答案是您无需修改​​或以其他方式妥协您的逻辑 数据设计来适应这种物理 存储考虑。

这是因为在 SQL Server 中,XML 是一种“大值类型”,您可以通过使用 '大值类型 out 来控制这些是物理存储在行内还是行外sp_tableoption 系统过程中的 row' 选项,如下所示:

EXEC sys.sp_tableoption N'MyTable', 'large value types out of row', 'ON'

如果将其关闭,则小于 8000 字节的 XML 值将存储在行内。如果将其设置为 ON,则所有 XML 值(和 [N]Varchar(MAX) 列)都将存储在表外的单独区域中。 (这一切都在这里详细解释:http://technet.microsoft.com/en-us/library/ms189087(SQL.105).aspx)

将其设置为哪个的问题很难说,但一般来说:如果您希望多次检索/修改此列,我建议将其放在行内。否则将其存储在行外。

关于sql - 我应该将 XML Blob 放入单独的表中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14126664/

相关文章:

sql - 在 SQL 中创建登录表

database - 在单个表或多个表中表示级别

ruby-on-rails - Ruby on Rails 数据库关系结构

visual-studio-2008 - 我应该先安装哪个 : Visual Studio 2008 or SQL Server 2008?

mysql - 服务器链接 - mysql 和 sql 2008 服务器链接

java - 单表继承(使用 Ebean + Play! 框架)

C#:检索非参数化存储过程查询的输出参数?

c# - 参数化动态 sql 不返回任何结果

mysql - 高效查询 - 当查询A表中的一组特定ID时,如何检查B表中的条件是否符合A表中选定的ID?

python - 插入表时处理 SQLAlchemy 中的触发器