SQLSERVER数据库表分区学习(未在项目上使用)
由于业务系统 TJ_TJJLMXB数据量达到亿级,高峰期对该表操作堵塞导致系统响应慢,所以想分区试下效果
首先也是网上查资料,然后自己动手尝试
总结后的步骤:
1.创建文件组
(SQLSERVER有个默认的文件组PRIMARY,对应的数据文件后缀是.mdf,后续新建的文件组对应的数据文件格式都是ndf的)
2.创建数据文件绑定文件组
绑定文件组后通过sqlserver manager studio可视化窗口查看一目了然
3.创建分区函数
4.创建分区方案
5.创建表使用该分区方案
--1.创建文件组
--2019年及之前的数据1个文件组
ALTER DATABASE [bs_tjxt_binjiang2018]
ADD FILEGROUP [TJ_TJJLMXB_FLLES_2019]
--2020年1月1号的数据一个文件组
ALTER DATABASE [bs_tjxt_binjiang2018]
ADD FILEGROUP [TJ_TJJLMXB_FLLES_2020]
--2.创建数据文件关联文件组
ALTER DATABASE [bs_tjxt_binjiang2018]
ADD FILE
(NAME = N'TJ_TJJLMXB_FLLES_DATA_2019',FILENAME = N'F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TJ_TJJLMXB_FLLES_DATA_2019.ndf',SIZE = 3000MB, MAXSIZE=UNLIMITED,FILEGROWTH = 200MB )
TO FILEGROUP [TJ_TJJLMXB_FLLES_2019];
ALTER DATABASE [bs_tjxt_binjiang2018]
ADD FILE
(NAME = N'TJ_TJJLMXB_FLLES_DATA_2020',FILENAME = N'F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TJ_TJJLMXB_FLLES_DATA_2020.ndf',SIZE = 3000MB ,MAXSIZE=UNLIMITED, FILEGROWTH = 200MB )
TO FILEGROUP [TJ_TJJLMXB_FLLES_2020];
可视化窗口查看文件组 和文件 也可以sql查询
--3.创建分区函数 2019-12-31之前为1组(不包含2019-12-31) 2019-12-31后为一组(包含2019-12-31)
CREATE PARTITION FUNCTION PARTITION_FUNCTION_TJ_TJJLMXB( DATETIME )
AS RANGE LEFT
FOR VALUES( '2019-12-31')
--查询分区函数
SELECT * FROM sys.partition_functions;
--使用DROP PARTITION FUNCTION xxxx语句删除分区函数
--查询分区函数
SELECT * FROM sys.partition_functions;
--4.创建分区方案 分区函数会把数据根据临界日期(2019-12-31)分到2个组 所以分区方案也要指定2个文件组
CREATE PARTITION SCHEME PARTITION_SCHEME_TJ_TJJLMXB
AS PARTITION PARTITION_FUNCTION_TJ_TJJLMXB
TO (TJ_TJJLMXB_FLLES_2019,TJ_TJJLMXB_FLLES_2020)
--查询分区方案
SELECT * FROM sys.partition_schemes
--使用DROP PARTITION SCHEME xxxxx 语句删除分区方案
--5.创建表使用该分区方案(分区方案创建好是可多表复用的)
--先创建一张我们要分区的同样结构的表用于测试
CREATE TABLE [dbo].[TJ_TJJLMXB_TESTFQ01](
[TJBH] [varchar](16) NOT NULL,
[XMBH] [varchar](12) NOT NULL,
[kettle_lastmodify] [datetime] NOT NULL
) ON PARTITION_SCHEME_TJ_TJJLMXB(kettle_lastmodify)
--.6.写入测试数据验证分区
insert into TJ_TJJLMXB_TESTFQ01(TJBH,XMBH,kettle_lastmodify)values('0000001','0001','2011-10-10 9:10:10');
insert into TJ_TJJLMXB_TESTFQ01(TJBH,XMBH,kettle_lastmodify)values('0000002','0002','2019-12-30 9:10:10');
insert into TJ_TJJLMXB_TESTFQ01(TJBH,XMBH,kettle_lastmodify)values('0000003','0003','2019-12-31 9:10:10');
insert into TJ_TJJLMXB_TESTFQ01(TJBH,XMBH,kettle_lastmodify)values('0000004','0004','2020-01-01 9:10:10');
insert into TJ_TJJLMXB_TESTFQ01(TJBH,XMBH,kettle_lastmodify)values('0000005','0005','2020-02-02 9:10:10');
--查询数据
select * from TJ_TJJLMXB_TESTFQ01;
--7.查看分区效果,可以看到2019-12-31号之前的数据在分区1,之后的数据在分区2 ,说明分区成功
SELECT $PARTITION.PARTITION_FUNCTION_TJ_TJJLMXB(kettle_lastmodify) AS 分区编号, COUNT(1) AS 记录数
FROM TJ_TJJLMXB_TESTFQ01
GROUP BY $PARTITION.PARTITION_FUNCTION_TJ_TJJLMXB(kettle_lastmodify)
--查看分区效果
SELECT $PARTITION.PARTITION_FUNCTION_TJ_TJJLMXB(kettle_lastmodify) AS 分区编号, *
FROM TJ_TJJLMXB_TESTFQ01