SQL Server 2005开始支持表分区,这种技术允许所有的表分区都保存在同一台服务器上。每一个表分区都和在某个文件组(filegroup)中的单个文件关联。同样的一个文件/文件组可以容纳多个分区表。在这种设计架构下,数据库引擎能够判定查询过程中应该访问哪个分区,而不用扫描整个表。如果查询需要的数据行分散在多个分区中,SQL Server使用多个处理器对多个分区进行并行查询。你可以为在创建表的时候就定义分区的索引。对小索引的搜索或者扫描要比扫描整个表或者一张大表上的索引要快很多。因此,当对大表进行查询,表分区可以产生相当大的性能提升通过分别检查同一条返回所有行的、简单SELECT语句在分区表和非分区表上的执行计划,返回的数据范围通过WHERE语句来指定。同一条语句在这两个不同的表上有不同的执行计划。对于分区表的查询显示出一个嵌套的循环和索引的扫描。从本质上来说,SQL Server将两个分区视为独立的表,因此使用一个嵌套循环将它们连接起来。对非分区的表的同一个查询则使用索引扫描来返回同样的列。当你使用同样的分区策略创建多个表,同时在查询中连接这些表,那么性能上的提升会更加明显。
alter database [mydatabase] --创建文件组1 add filegroup [fg_tb_partition_id_1] go alter database [mydatabase] --创建文件组2 add filegroup [fg_tb_partition_id_2] go alter database [mydatabase] --创建文件组3 add filegroup [fg_tb_partition_id_3] go
2.1.2.为数据库创建文件
一个文件不能属于两个文件组,一个文件组可以包含多个文件,可以同时指定初始化大小及
增长大小。
alter database [mydatabase] addfile (name=N'fg_tb_partition_id_1_data', filename=N'D:\dbbackup\fg_tb_partition_id_1_data.ndf', size=30mb,filegrowth=10%) to filegroup [fg_tb_partition_id_1] go alter database [mydatabase] addfile (name=N'fg_tb_partition_id_2_data', filename=N'D:\dbbackup\fg_tb_partition_id_2_data.ndf', size=30mb,filegrowth=10%) to filegroup [fg_tb_partition_id_2] go alter database [mydatabase] addfile (name=N'fg_tb_partition_id_3_data', filename=N'D:\dbbackup\fg_tb_partition_id_3_data.ndf', size=30mb,filegrowth=10%) to filegroup [fg_tb_partition_id_3] go
select $partition.fun_tb_partition_id(id) as partition_num, min(id) as min_value, max(id) as max_value, count(1) as record_num from [dbo].[tb_partition1] groupby $partition.fun_tb_partition_id(id) orderby $partition.fun_tb_partition_id(id)
2.4.3.切换分区
altertable [dbo].[tb_partition1] switch partition1to [dbo].[tb_partition2] partition1 --查看结果 select * from [dbo].[tb_partition1] select * from [dbo].[tb_partition2]
2.4.4.修改分区架构和分区函数
alterpartition scheme [sch_tb_partition_id] next used [fg_tb_partition_id_1] go alterpartitionfunction [fun_tb_partition_id]() split range(15000)