MSSQL中的分区表
Tags: MSSQLSQL Server分区表
假定数据库为'test',以一张按年分区、拥有2022-2024三年分区的分区表'part_test'为例,记录SQL Server分区的创建、删除和查询。
一、创建分区
创建分区分三步:创建文件组和文件、创建分区函数和方案、创建分区表
1. 创建文件组和文件
1 2 3 4 5 6 7 8 9 10 11 | USE [test] GO -- 创建2022-2024三年分区对应的文件 ALTER DATABASE [test] ADD FILEGROUP [testfg2022] ALTER DATABASE [test] ADD FILE ( NAME = N'testf2022', FILENAME = N'/var/opt/mssql/data/testf2022.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) TO FILEGROUP [testfg2022] ALTER DATABASE [test] ADD FILEGROUP [testfg2023] ALTER DATABASE [test] ADD FILE ( NAME = N'testf2023', FILENAME = N'/var/opt/mssql/data/testf2023.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) TO FILEGROUP [testfg2023] ALTER DATABASE [test] ADD FILEGROUP [testfg2024] ALTER DATABASE [test] ADD FILE ( NAME = N'testf2024', FILENAME = N'/var/opt/mssql/data/testf2024.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) TO FILEGROUP [testfg2024] GO |
2. 创建分区函数和方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | USE [test] GO IF EXISTS (SELECT * FROM sys.partition_functions WHERE name = 'partition_test') DROP PARTITION FUNCTION partition_test; GO -- RIGHT指定数据等于分隔值时落在下一个分区,[2022,2023),[2023,2024),[2024,) CREATE PARTITION FUNCTION [partition_test](int) AS RANGE RIGHT FOR VALUES (N'2023', N'2024'); GO IF EXISTS (SELECT * FROM sys.partition_schemes WHERE name = 'scheme_test') DROP PARTITION SCHEME scheme_test; GO CREATE PARTITION SCHEME [scheme_test] AS PARTITION [partition_qc] TO ([testfg2022], [testfg2023], [testfg2024]) GO |
3. 创建分区表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | USE [test] GO IF OBJECT_ID('dbo.part_test','U') IS NOT NULL DROP TABLE dbo.part_test; GO CREATE TABLE part_test ( year integer, -- COMMENT '数据年份' data integer, -- COMMENT '数据' ) on scheme_test(year); -- 指定所用分区方案 -- 聚簇索引 create clustered index idx_year on part_test(year); GO |
二、删除分区
删除分区也分三步:删除分区数据、删除分区方案和函数、删除文件和文件组