2

我正在寻找一些关于如何在 SQL Server 2012 数据库中存储“数组”和“字典”类型信息的建议。到目前为止,我一直在使用 xml 类型,因为我可以轻松查询,并且可以简单地表示它们,例如:

<Array><i>1</i><i>2</i><i>3</i></Array>
<Dictionary><Item1>Value1</Item1><Item2>Value2</Item2></Dictionary>

到目前为止,我认为 xml 数据类型会从 PAGE 压缩中受益,但今天我意识到事实并非如此。这是一个相当大的问题,因为数据库每天将存储数十万条这样的记录,而且似乎大部分数据都是这种未压缩的 XML。

所以我正在寻找一种解决方法。我想我可以将这些数据制成表格。例如,一个数据字典表:

[ID] bigint PK,
[OwnerID] bigint,
[Name] varchar(32),
[Value] varchar(32)

还有一个数组:

[OwnerID] bigint PK
[Index] int PK
[Value] varchar(32)

这会起作用,但我担心这种方法有多“可查询”——即“WHERE ObjectID 的 X 字典正确 = Y”。我可以为此编写一个标量函数,但我知道这会导致性能问题。

我已经阅读了这个特定问题,但普遍的共识似乎是“使用 xml 列,不要担心它”,但考虑到我需要允许的数据量,我认为这不是对我来说是一个选择。

任何建议或见解将不胜感激。

4

1 回答 1

2

XML 列是一个允许对其进行查询的 blob...

据我记得,至少在 SQL2008R2 之前,Microsoft 对 XML 列的建议仅在您对其进行零星搜索时才使用它们,我认为这远非您的情况。

您的数据似乎是高度标准化的,因此如果您对表格有良好的索引,我建议您访问您所指的表格。

无论如何,如果您每月要拥有数千万行,我宁愿建议您对表进行分区以进一步提高性能。

最后,从磁盘使用的角度来看,由于您正在计划此类卷,因此存储根本不应该是一个问题,它应该是一个要求 (IMO)。

于 2013-07-04T15:43:01.530 回答