我正在设计一个包含大量记录的事务表。它将有大量的读写。
用户会在某一时刻上传 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/