我正在寻找有关如何在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列而不用担心它”,但考虑到我需要允许的数据量,我不会认为这是我的选择。
非常感谢任何建议或见解。
答案 0 :(得分:2)
XML列是一个允许对其进行查询的blob ...
据我记忆,至少在SQL2008R2之前,微软对XML列的建议仅在您进行零星搜索时使用它们,我认为这远不是您的情况。
你的数据似乎是高度规范化的,所以如果你对表有很好的索引,我建议你去像你指向那里的表。
无论如何,如果你每月要有数千万行,我宁愿建议你对表进行分区以进一步提高性能。
最后,从磁盘使用的角度来看,既然您正在计划这样的卷,那么存储应该不是一个问题,它应该是一个要求(IMO)。