关于分区的文章真的不好写,虽然不管哪个项目哪个人,只要提到大数据量大表第一反应就是做分区,但是作为一个DBA是否实施表分区需要考虑的问题实在太多
主要问题来自于以下几个层面:
1. 客户体验层面
2. 技术层面
3. 后期维护层面

现在所以关于分区将分为几个章节进行阐述:
首先由于查看这个Blog的多半是专职技术人员,所以先给出最快实现的代码吧,呵呵
代码给出顺序与执行顺序一致:

 
  
  1. -- 创建分区表存储的文件组  
  2. USE [master]  
  3. GO  
  4.  
  5. ALTER DATABASE NOAS_DW ADD FILEGROUP FG_PRATITION_TABLENAME  
  6. GO 
 
  
  1. -- 给文件组加入数据文件  
  2. USE UserDatabase  
  3. GO  
  4.  
  5. ALTER DATABASE UserDatabase  
  6. ADD FILE   
  7. (NAME = Partition_TableName_001, FILENAME = 'F:\Path\Partition_TableName_001.ndf'SIZE = 4GB, FILEGROWTH = 0),  
  8. (NAME = Partition_TableName_002, FILENAME = 'F:\Path\Partition_TableName_002.ndf'SIZE = 4GB, FILEGROWTH = 0)  
  9. TO FILEGROUP FG_Partition_TableName;  
  10. GO 
 
  
  1. -- 创建分区函数和分区架构  
  2. -- 分区函数是用来限定数据分区的区域临界点的  
  3. -- 分区架构是基于分区函数控制具体的存储的  
  4. USE UserDatabase  
  5. GO  
  6.  
  7. -- Create partition function  
  8. CREATE PARTITION FUNCTION PF_TableName_PartitionColumnName(DataType) AS RANGE RIGHT FOR VALUES()  
  9. GO  
  10. -- Create partition scheme  
  11. CREATE PARTITION SCHEME PS_TableName_PartitionColumnName            AS PARTITION PF_TableName_PartitionColumnName           TO (FG_Partition_TableName)  
  12. GO 
 
  
  1. -- 创建分区表  
  2. CREATE TABLE TableName  
  3. (  
  4.     Column1 INT,  
  5.     Column2 VARCHAR(256),  
  6.     PartitionColumnName DataType -- 伪代码注意修改  
  7. )ON PS_TableName_PartitionColumnName(PartitionColumnName) 
 
  
  1. -- 我们假定分区列是Datetime类型进行批量分区  
  2. -- 每天一个分区  
  3. USE UserDatabase  
  4. GO  
  5.  
  6. -- SPLIT RANGE  
  7. DECLARE @BeginDate  DATETIME  
  8. DECLARE @EndDate    DATETIME  
  9. DECLARE @Count      INT 
  10. DECLARE @Flag       INT 
  11.  
  12. SET @BeginDate = '2012-02-12 0:00:00.000' 
  13. SET @EndDate = '2012-12-31 0:00:00.000' 
  14. SET @Count = DATEDIFF(DD, @BeginDate, @EndDate)  
  15. SET @Flag = 0  
  16.  
  17. WHILE   @Flag <= @Count 
  18. BEGIN 
  19.     ALTER PARTITION SCHEME PS_TableName_PartitionColumnName     NEXT    USED    FG_Partition_TableName  
  20.       
  21.     ALTER PARTITION FUNCTION PF_TableName_PartitionColumnName() SPLIT RANGE (DATEADD(DD, @Flag, @BeginDate))  
  22.  
  23.     SET @Flag = @Flag + 1  
  24. END 
  25. GO 

下一讲将介绍分区自动维护