将数据库分区可提高其性能并易于维护。通过将一个大表拆分成更小的单个的表,只访问小部分数据的查询可以执行得更快,因为 需要扫描的数据少了。维护任务(例如,重新生成索引或备份表)也可以更快地运行。
可以通过不拆分表、而是将表放置在不同的磁盘驱动器上的方法来实现分区。例如,将表放在某个物理驱动器上并将相关的表放在不同的驱动器上可以提高查 询性能,因为在运行涉及表间联接的查询时,多个磁头可以同时读取数据。可以使用 SQL Server 文件组来指定放置表的磁盘。
硬件分区
硬件分区将数据库设计为利用可用的硬件体系结构。以下是硬件分区示例:
可以执行多线程操作的多处理器,使得可以同时运行许多查询。换句话说,在多处理器上可以同时运行查询的各个组件,因此使单个查询的速度更快。例如, 查询内引用的每个表可以同时由不同的线程扫描。
RAID(独立磁盘冗余阵列)设备使得数据在多个磁盘驱动器中条带化,使更多的读写磁头同时读取数据,因此可以更快地访问数据。在多个驱动器中条带 化的表通常比存储在单个驱动器上的相同的表扫描速度要快。换句话说,将表与相关的表分开存储在不同的驱动器上可以显著提高联接那些表的查询的性能。有关详 细信息,请参阅 RAID。
水平分区
水平分区将表分为多个表。这样,每个表包含的列数相同,但是行更少。例如,可以将一个包含十亿行的表水平分区成 12
个表,每个小表表示特定年份内一个月的数据。任何需要特定月份数据的查询只需引用相应月份的表。
具体如何将表进行水平分区取决于如何分析数据。您应将表进行分区,以便查询引用的表尽可能少。否则,查询时需要使用过多的 UNION 查询来逻辑合并表,这会影响查询性能。有关查询水平分区的表的详细信息,请参阅使用视图的情况。
常用的方法是根据时期和使用对数据进行水平分区。例如,一个表可能包含最近五年的数据,但是只定期访问本年度的数据。在这种情况下,可考虑将数据分 区成五个表,每个表只包含一年的数据。
有关详细信息,请参阅已分区表和已分区索引。
垂直分区
垂直分区将一个表分为多个表,每个表包含较少的列。垂直分区的两种类型是规范化和行拆分。
规范化是标准的数据库进程,该进程从表中删除冗余列并将其放到辅助表中,辅助表按主键与外键的关系链接到主表。
行拆分将原始表垂直分成多个只包含较少列的表。拆分的表内的每个逻辑行与其他表内的相同逻辑行匹配。例如,联接每个拆分的表内的第十行将重新创建原 始行。
与水平分区一样,垂直分区使得查询需要扫描的数据变少了。这将提高查询性能。例如,某个表包含七列,通常只引用该表的前四列,那么将该表的后三列拆 分到一个单独的表中将有利于提高性能。
应谨慎考虑垂直分区操作,因为分析多个分区内的数据需要查询联接这些表。如果分区过大的话,也会影响性能。