SQL Server 2005 中的分区表和索引
2007-05-17 09:37:24 来源:WEB开发网需要删除数据时的性能改善也很显著。如果一个数据库需要一个滑动窗口数据集,用于移植新数据(例如当前月份的数据)并删除最早的数据(可能是上一年同一月份的数据),那么使用分区可以将数据移植的性能提高几个数量级。虽然这看起来好像很大,但考虑了未分区的区别;当所有数据位于一个表中时,删除 1 GB 的旧数据需要对表及其相关索引进行逐行处理。删除数据的过程将创建大量的日志活动,不允许在删除的过程中出现日志截断问题(注意,删除是一个自动提交的事务;但是,可以通过尽可能地执行多个删除操作来控制事务的大小),因此,可能需要更大的日志。但是,如果使用分区,删除相同数量的数据需要从分区表中删除特定的分区(一种元数据操作),然后删除或截断独立的表。
此外,如果不知道如何才能最好地设计分区,则不可能认识到将文件组与分区结合使用是实现分区的理想选择。文件组允许您将各个表放置到不同的物理磁盘上。如果一个表包含多个文件(使用文件组),则无法预测数据的物理位置。对于不需要使用并行操作的系统来说,SQL Server 可以在文件组之间更平均地使用所有磁盘,使数据具体放在什么位置变得不是那么重要,从而提高系统的性能。
注意:在图 2 中,一个文件组包含三个文件。此文件组中放置了两个表,即 Orders 和 OrderDetails。将表放置到文件组中时,SQL Server 将根据文件组中的对象需要的空间,从每个文件中获得盘区分配(64-KB 块,相当于八个 8-KB 页面),按比例填充文件组中的文件。创建 Orders 和 OrderDetails 表时,文件组是空的。创建订单时,数据被输入到 Orders 表中(每个订单占据一行),并且按照每个明细项一行的方式输入到 OrderDetails 表中。SQL Server 将一个盘区分配给文件 1 中的 Orders 表,将另一个盘区分配给文件 2 中的 OrderDetails 表。OrderDetails 表的增长速度可能比 Orders 表快,后续的分配将转到下一个需要空间的表中。随着 OrderDetails 表的增长,它将从文件 3 中获取下一个盘区,而 SQL Server 将继续在文件组的文件之间“循环”下去。在图 2 中,就是从每个表到盘区,再从每个盘区到相应的文件组。盘区是按照需要的空间进行分配的,而根据流程进行编号。
赞助商链接