首先打开sqlserver工具,然后新建一个数据库如图:写完数据库名称后先不要确认,在左侧选项中选择文件组。给数据库添加一些文件组,如图:我这里按今年月份,每个月新建一个文件组。然
首先打开sqlserver工具,然后新建一个数据库如图:
写完数据库名称后先不要确认,在左侧选项中选择文件组。给数据库添加一些文件组,如图:
我这里按今年月份,每个月新建一个文件组。然后点击确定。
数据库创建好以后找到我们的数据库,点击右键选择属性。然后打开文件组可以看到我们刚刚新建的文件组都在里面。
然后选择文件选项里我们添加一些数据库的文件,这些数据库文件就是以后我们要把数据存储到文件里的。
如图:
注意多了一行,数据库文件名称安装每个月来取的,然后选择文件组,选择以后这个文件放到哪个文件组下。选择好后再给文件取个名字。然后刚刚写了几个文件组那么就写几个数据库文件,对应上。如下:
点击确认。
下一步创建分区函数代码如下:
--创建分区函数
CREATE PARTITION FUNCTION Function_DateTime ( DATETIME )
AS RANGE RIGHT
FOR VALUES('2018-08-02', '2018-09-02', '2018-10-02', '2018-11-02', '2018-12-02')
每个月写一个日期。创建完成后可以用sql查询下有没有创建成功代码:
--查询分区函数
SELECT * FROM sys.partition_functions
接着再创建分区方案代码如下:
--创建分区方案,将文件跟分区绑定
CREATE PARTITION SCHEME Scheme_DateTime
AS PARTITION Function_DateTime
TO ([PRIMARY], MyDB201808, MyDB201809, MyDB201810, MyDB201811,MyDB201812 )
这步操作是将文件跟分区绑定在一起,创建完成后查询一下:
--查询分区方案
SELECT * FROM sys.partition_schemes
如果不想写查询语句的话可以在工具中查看,如图:
可以看到,分区函数和分区方案都在这里。
下一步就是创建分区表了,就是我们的表结构:
--创建分区表
CREATE TABLE [Order]
(
OrderID INT IDENTITY(1,1) NOT NULL,
UserID INT NOT NULL,
TotalAmount DECIMAL(18,2) NULL,
OrderDate DATETIME NOT NULL
) ON Scheme_DateTime ( OrderDate )
注意最后一行,要吧OrderDate放到分区方案中,以为我们的数据按日期存储到各个文件中的。
然后添加一些数据:
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (1 ,10.00 ,'2018-08-12');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (1 ,20.50 ,'2018-08-21');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (2 ,40.00 ,'2018-08-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (3 ,40.00 ,'2018-09-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (4 ,50.00 ,'2018-10-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (5 ,60.00 ,'2018-10-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (5 ,60.00 ,'2018-11-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (6 ,70.00 ,'2018-11-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (10 ,90.00 ,'2018-12-21');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (9 ,100.00 ,'2018-12-20');
GO
添加完数据后我们可以来查看下每个分区中的数据个数:
--查询个分区表中数据
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 1
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 2
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 3
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 4
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 5
之前我们创建了5个分区,然后根据上面代码执行后可以看到每个分区的数据,运行结果如下:
这说明我们把输入已经按日期插入到各个分区中了。
全部SQL 代码:
--创建分区函数
CREATE PARTITION FUNCTION Function_DateTime ( DATETIME )
AS RANGE RIGHT
FOR VALUES('2018-08-02', '2018-09-02', '2018-10-02', '2018-11-02', '2018-12-02')
--查询分区函数
SELECT * FROM sys.partition_functions
--创建分区方案,将文件跟分区绑定
CREATE PARTITION SCHEME Scheme_DateTime
AS PARTITION Function_DateTime
TO ([PRIMARY], MyDB201808, MyDB201809, MyDB201810, MyDB201811,MyDB201812 )
--查询分区方案
SELECT * FROM sys.partition_schemes
--创建分区表
CREATE TABLE [Order]
(
OrderID INT IDENTITY(1,1) NOT NULL,
UserID INT NOT NULL,
TotalAmount DECIMAL(18,2) NULL,
OrderDate DATETIME NOT NULL
) ON Scheme_DateTime ( OrderDate )
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (1 ,10.00 ,'2018-08-12');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (1 ,20.50 ,'2018-08-21');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (2 ,40.00 ,'2018-08-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (3 ,40.00 ,'2018-09-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (4 ,50.00 ,'2018-10-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (5 ,60.00 ,'2018-10-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (5 ,60.00 ,'2018-11-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (6 ,70.00 ,'2018-11-20');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (10 ,90.00 ,'2018-12-21');
INSERT INTO [dbo].[Order] ([UserID],[TotalAmount] ,[OrderDate]) VALUES (9 ,100.00 ,'2018-12-20');
GO
--查询个分区表中数据
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 1
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 2
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 3
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 4
SELECT * FROM [Order] WHERE $PARTITION.Function_DateTime(OrderDate) = 5