2

表中每条记录的大小是一个性能参数。这意味着如果记录的大小很小,SQL Server 会在每次读取物理硬盘时获取更多记录。

在我们的大多数查询中,我们不会使用表的所有列,并且可能某些列仅在特定查询中使用。我们是否可以对每个表的列进行分区以获得更好的性能。

我使用 SQL Server 2008 R2。

谢谢你。

4

3 回答 3

3

真正的列级分区带有面向列的存储,请参阅SQL Server 2012 列存储索引内部,但这仅在 SQL Server 2012 中可用,用于解决特定的 BI 工作负载,而不是一般的 SQL Server 应用程序。

在面向行的存储中,垂直分区实际上是设计适当覆盖索引的另一个名称。如果引擎有一个替代的窄索引,它将尽可能使用它而不是基表。

最后一种选择,手动分割表并在查询中加入垂直“碎片”(或定义加入视图,同样的事情)通常是不明智的,而且很少有回报。

于 2012-06-07T12:32:14.843 回答
1

目前,使用 SQL Server 2008,您无法对表进行水平分区。如果您有大量列,则需要将其切分成共享公共键的水平块表,然后用可更新的视图对它们进行蒙皮,以产生一张非常宽的表的错觉。

如果只有几个大列(例如VARCHAR(1000)),您可以将数据规范化为唯一值表。

于 2012-06-07T12:33:17.317 回答
0

无列分区规则的一个例外是声明为 max 的字符列(例如,varchar(max))。

这些存储在单独的数据页上。我相信除非在查询中引用了该列,否则不会读入此页面。如果我错了,我相信更多知识的人会纠正我。

于 2012-06-07T13:17:34.947 回答