简单sqlserver表分区例子

因为项目指定了要用微软的SqlServer数据库,普通表肯定是无法满足到时巨大的数据量,特地去了解了SqlServer存储大数据量的方案,知道了它大数据量的解决方案‘表分区’(ps:当然还会有别的解决方案,比如使用中间件的方式分表),就先去大概了解了下表分区的大概部奏,按时间分组做了个例子

创建文件组

--  添加文件组  ALTER DATABASE [数据库名] ADD FILEGROUP 文件组名
ALTER DATABASE [test] ADD FILEGROUP DemoFile202008;
ALTER DATABASE [test] ADD FILEGROUP DemoFile202009;
ALTER DATABASE [test] ADD FILEGROUP DemoFile202010;
ALTER DATABASE [test] ADD FILEGROUP DemoFile202011;

-- 删除文件组的sql(ps:要用到的话可以去掉注释)
-- ALTER DATABASE [test] REMOVE FILEGROUP DemoFileGroup

添加文件到对应文件组

-- 添加文件到对应的文件组
ALTER DATABASE [test] ADD FILE (
	NAME = N'DemoFile',
	FILENAME = 'D:\sqlserver_partition_test\DemoFile.mdf',
	SIZE = 5MB,
	FILEGROWTH = 5MB
) TO FILEGROUP [DemoFile202008];

ALTER DATABASE [test] ADD FILE (
	NAME = N'DemoFile1',
	FILENAME = 'D:\sqlserver_partition_test\DemoFile1.ndf',
	SIZE = 5MB,
	FILEGROWTH = 5MB
) TO FILEGROUP [DemoFile202009];

ALTER DATABASE [test] ADD FILE (
	NAME = N'DemoFile2',
	FILENAME = 'D:\sqlserver_partition_test\DemoFile2.ndf',
	SIZE = 5MB,
	FILEGROWTH = 5MB
) TO FILEGROUP [DemoFile202010];

ALTER DATABASE [test] ADD FILE (
	NAME = N'DemoFile3',
	FILENAME = 'D:\sqlserver_partition_test\DemoFile3.ndf',
	SIZE = 5MB,
	FILEGROWTH = 5MB
) TO FILEGROUP [DemoFile202011];

-- 删除文件sql(ps:要用到的话可以去掉注释)
-- ALTER DATABASE [test] REMOVE FILE DemoFile3;

定义分区函数

-- 定义分区函数
CREATE PARTITION FUNCTION DemoPartitionFunction 
(datetime2(0)) AS RANGE LEFT FOR VALUES 
(
	'2020-08-01',
	'2020-09-01',
	'2020-10-01'
);

-- 删除分区函数(ps:要用到的话可以去掉注释)
-- DROP PARTITION FUNCTION DemoPartitionFunction;

定义分区架构

-- 定义分区架构
CREATE PARTITION SCHEME DemoPartitionScheme
AS PARTITION DemoPartitionFunction TO 
(
	DemoFile202008,
	DemoFile202009,
	DemoFile202010,
	DemoFile202011
);

创建分区表使用分区架构

-- 创建分区表,根据分区架构中的分区函数将对应的数据分配到对应的文件组文件中
CREATE TABLE [Order]
(
    OrderID INT IDENTITY(1,1) NOT NULL,
    UserID INT NOT NULL,
    TotalAmount DECIMAL(18,2) NULL,
    OrderDate datetime2(0) NOT NULL
) ON DemoPartitionScheme ( OrderDate )

查询所有分区占用情况

select $PARTITION.PartitionFunctionDateTime(Col) as 分区编号,
count(Id) as 记录数 from A group by $PARTITION.PartitionFunctionDateTime(Col)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值