因为项目指定了要用微软的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)