关于分区的文章真的不好写,虽然不管哪个项目哪个人,只要提到大数据量大表第一反应就是做分区,但是作为一个DBA是否实施表分区需要考虑的问题实在太多
主要问题来自于以下几个层面:
1. 客户体验层面
2. 技术层面
3. 后期维护层面
现在所以关于分区将分为几个章节进行阐述:
首先由于查看这个Blog的多半是专职技术人员,所以先给出最快实现的代码吧,呵呵
代码给出顺序与执行顺序一致:
- -- 创建分区表存储的文件组
- USE [master]
- GO
- ALTER DATABASE NOAS_DW ADD FILEGROUP FG_PRATITION_TABLENAME
- GO
- -- 给文件组加入数据文件
- USE UserDatabase
- GO
- ALTER DATABASE UserDatabase
- ADD FILE
- (NAME = Partition_TableName_001, FILENAME = 'F:\Path\Partition_TableName_001.ndf', SIZE = 4GB, FILEGROWTH = 0),
- (NAME = Partition_TableName_002, FILENAME = 'F:\Path\Partition_TableName_002.ndf', SIZE = 4GB, FILEGROWTH = 0)
- TO FILEGROUP FG_Partition_TableName;
- GO
- -- 创建分区函数和分区架构
- -- 分区函数是用来限定数据分区的区域临界点的
- -- 分区架构是基于分区函数控制具体的存储的
- USE UserDatabase
- GO
- -- Create partition function
- CREATE PARTITION FUNCTION PF_TableName_PartitionColumnName(DataType) AS RANGE RIGHT FOR VALUES()
- GO
- -- Create partition scheme
- CREATE PARTITION SCHEME PS_TableName_PartitionColumnName AS PARTITION PF_TableName_PartitionColumnName TO (FG_Partition_TableName)
- GO
- -- 创建分区表
- CREATE TABLE TableName
- (
- Column1 INT,
- Column2 VARCHAR(256),
- PartitionColumnName DataType -- 伪代码注意修改
- )ON PS_TableName_PartitionColumnName(PartitionColumnName)
- -- 我们假定分区列是Datetime类型进行批量分区
- -- 每天一个分区
- USE UserDatabase
- GO
- -- SPLIT RANGE
- DECLARE @BeginDate DATETIME
- DECLARE @EndDate DATETIME
- DECLARE @Count INT
- DECLARE @Flag INT
- SET @BeginDate = '2012-02-12 0:00:00.000'
- SET @EndDate = '2012-12-31 0:00:00.000'
- SET @Count = DATEDIFF(DD, @BeginDate, @EndDate)
- SET @Flag = 0
- WHILE @Flag <= @Count
- BEGIN
- ALTER PARTITION SCHEME PS_TableName_PartitionColumnName NEXT USED FG_Partition_TableName
- ALTER PARTITION FUNCTION PF_TableName_PartitionColumnName() SPLIT RANGE (DATEADD(DD, @Flag, @BeginDate))
- SET @Flag = @Flag + 1
- END
- GO
下一讲将介绍分区自动维护
转载于:https://blog.51cto.com/greece760/792476