繁体   English   中英

是否可以在SQL Server中进行列分区

[英]Is it possible to column partitioning in SQL Server

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

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

我使用SQL Server 2008 R2。

谢谢。

真正的列级分区随附于面向列的存储,请参阅“ SQL Server 2012列存储索引内部” ,但这仅在SQL Server 2012中可用,并且可以解决特定的BI工作负载,而不是常规的SQL Server应用程序。

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

最后一种选择是手动建议将表夹板并在查询中联接垂直的“分片”(或定义联接视图,同样的事情),通常是不明智的,而且很少能得到回报。

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

如果只有几个大列(例如VARCHAR(1000) ),则可以将数据标准化为唯一的值表。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM