何时使用 XML 数据类型

Mat*_*les 12 sql-server-2008 xml

我负责在一个项目上创建一个数据库。我们有很少有值的字段(每 10,000 条记录中有 1 个),我正在尝试找出将其存储在数据库中的最佳方法。

据我所知,我有 3 个选择:

  1. 在表中为每个额外值添加一列
  2. 添加一个链接表,该表引用原始表并且仅在我们需要存储值的地方有记录
  3. 使用原始表中的 XML 数据类型并将所有值存储在此。

还有其他我没有考虑过的选择吗?

我正在尝试找出每种方法的优缺点。据我所知,1 将是最简单的,而 2 将占用最少的空间,但我正在努力为 3 找到许多资源。

Gai*_*ius 12

听起来您需要的是稀疏列过滤索引并使用选项 1。这些是完全支持和记录的功能,完全适用于这种情况。

SQL Server 数据库引擎在列定义中使用 SPARSE 关键字来优化该列中值的存储。因此,当表中任何行的列值为 NULL 时,该值不需要存储。

我无法想象一个 XML 解决方案在这种情况下表现良好,它会产生巨大的冗余元数据开销,并且查询速度会很慢。


gbn*_*gbn 5

  1. 如果 SQL Server 中的长度可变,则可为空的列占用空间。NULL 的事实存储在NULL 位图中。如果需要,您可以使用过滤索引对其进行索引,这样您就可以忽略 NULL 列。

  2. 当您考虑第 1 点时会增加复杂性。

  3. 别。很难搜索、解析等:你以后后悔的

它还取决于大小:对于几十亿行,这会是 char(1000) 吗?还是 10 万行的 tinyint?如果后者考虑增加第 2 点的复杂性:不值得。