摘要:SQL Server 2005 中基于表的分区功能为简化分区表的创建和维护过程提供了灵活性和更好的性能。追溯从逻辑分区表和手动分区表的功能到最新分区功能的发展历程,探索为什么、何时以及如何使用 SQL Server 2005 设计、实现和维护分区表。(本文包含一些指向英文站点的链接。 )
关于本文本文所描绘的功能和计划是下一版本 SQL Server 的开发方向。它们并非本产品的说明书,如有更改,恕不另行通知。对于最终产品是否具有这些功能不做任何明示或暗示的保证。对于某些功能,本文假设读者熟悉 SQL Server 2000 功能和服务。有关背景信息,请访问SQL Server 网站或 SQL Server 2000 资源工具包。这并不是产品说明书。
分区可以带来什么帮助?当表和索引变得非常大时,分区可以将数据分为更小、更容易管理的部分,从而提供一定的帮助。本文重点介绍横向分区,在横向分区中,大量的行组存储在多个相互独立的分区中。分区集的定义根据需要进行自定义、定义和管理。Microsoft SQL Server 2005 允许您根据特定的数据使用模式,使用定义的范围或列表对表进行分区。SQL Server 2005 还围绕新的表和索引结构设计了几种新功能,为分区表和索引的长期管理提供了大量的选项。
此外,如果具有多个 CPU 的系统中存在一个大型表,则对该表进行分区可以通过并行操作获得更好的性能。通过对各个并行子集执行多项操作,可以改善在极大型数据集(例如数百万行)中执行大规模操作的性能。通过分区改善性能的例子可以从以前版本中的聚集看出。例如,除了聚集成一个大型表外,SQL Server 还可以分别处理各个分区,然后将各个分区的聚集结果再聚集起来。在 SQL Server 2005 中,连接大型数据集的查询可以通过分区直接受益;SQL Server 2000 支持对子集进行并行连接操作,但需要动态创建子集。在 SQL Server 2005 中,已分区为相同分区键和相同分区函数的相关表(如 Order 和 OrderDetails 表)被称为已对齐。当优化程序检测到两个已分区且已对齐的表连接在一起时,SQL Server 2005 可以先将同一分区中的数据连接起来,然后再将结果合并起来。这使 SQL Server 2005 可以更有效地使用具有多个 CPU 的计算机。
分区的发展历史
分区的概念对 SQL Server 来说并不陌生。实际上,此产品的每个版本中都可以实现不同形式的分区。但是,由于没有为了帮助用户创建和维护分区架构而专门设计一些功能,因此分区一直是一个很繁琐的过程,没有得到充分的利用。而且,用户和开发人员对此架构存在误解(由于其数据库设计比较复杂),低估了它的优点。但是,由于概念中固有的重要性能改善,SQL Server 7.0 开始通过分区视图实现各种分区方式,以此来改进这种功能。现在,SQL Server 2005 为通过分区表对大型数据集进行分区又迈出了最大的一步。
对 SQL Server 7.0 之前的版本中的对象进行分区
在 SQL Server 6.5 及以前的版本中,分区只能通过设计来完成,还必须内置到所有数据访问编码和查询方法中。通过创建多个表,然后通过存储过程、视图或客户端应用程序管理对正确表的访问,通常可以改善某些操作的性能,但代价是增加了设计的复杂性。每个用户和开发人员都必须知道(并正确引用)正确的表。单独创建和管理每个分区,而使用视图来简化访问;但是这种解决方案对性能并没有太大的改善。使用联合视图简化用户和应用程序访问时,查询处理器必须访问每个基础表才能确定结果集所需的数据。如果只需要基础表的有限子集,则每个用户和开发人员都必须了解此设计,以便只引用相应的表。
SQL Server 7.0 中的分区视图
在 SQL Server 7.0 之前的版本中,手动创建分区所面临的挑战主要与性能有关。尽管视图可以简化应用程序设计、用户访问和查询的编写,但却无法改善性能。而在 SQL Server 7.0 版本中,视图结合了约束,允许查询优化程序从查询计划中删除不相关的表(即分区消除),大大降低了联合视图访问多个表时的总计划成本。