SPARSE是实现SQL列联合的最佳方式吗?
问题描述:
我们有19个空列,其中只有一个记录每列被分配一个非空值,有点像一个C工会的表格。这是使用SPARSE的理想情况吗?有更好的选择吗?每一列是(整数)外键,所以我不认为我们想尝试合并成一列,因为我们希望其他实体的关系是清楚和简单地定义。SPARSE是实现SQL列联合的最佳方式吗?
如果你想知道为什么我们有这样的设计,它是序列号跟踪。对于每个可能发生在序列号上的事务,我们都有一个记录。我们关心的有19种不同类型的交易(记录在19个不同的表格中)。我们希望能够参考任何这些交易。
答
根据BOL部分Estimated Space Savings by Data Type,如果至少64%是NULL
,则应考虑SPARSE
列为INT
列。
您有94.7%NULL
所以好像你可以从中受益我。这似乎确实是一个不寻常的设计。
+0
我已经知道节省的空间会在那里,所以稀疏是聊胜于无。我只是想知道是否有更好的选择。 – BlueMonkMN 2012-03-15 19:01:09
你应该看看这个问题http://stackoverflow.com/questions/1398453/why-when-should-i-use-sparse-column-sql-server-2008 – Lamak 2012-03-15 16:44:45
查询优化器非常擅长处理列中的空值。你是否想要为所有联合值联盟获得1个结果集? – Gats 2012-03-15 16:45:04
这种设计的原因是什么?你能举一个简单的例子吗?也许你需要超类型/子类型模式? – 2012-03-15 16:46:38