原文:点击打开链接
--0. 预备==>删除可能存在的库 [ Test_1 ]
USE [master]
GO
IF EXISTS (
SELECT *
FROM sys.databases
WHERE NAME = 'Test_1'
)
DROP DATABASE Test_1
GO
--1. 创建库 [Test_1], 注:多了两个文件组:Test_A.ndf, Test_B.ndf , 文件组也要指定位置
--创建新库,要演练分区所以我们会多创建两个文件组Test_A,Test_B,以便在后面的分区方案中使用。
CREATE DATABASE [Test_1] ON PRIMARY(
NAME = N'test_1',
FILENAME = N'D:\sqldata\test_1.mdf',
SIZE = 10240KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024KB
),
FILEGROUP [test_A]
(
NAME = N'Test_A',
FILENAME = N'D:\sqldata\test_A.ndf',
SIZE = 1024KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024KB
),
FILEGROUP [test_B]
(
NAME = N'Test_B',
FILENAME = N'D:\sqldata\test_B.ndf',
SIZE = 1024KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024KB
)
LOG ON
(
NAME = N'Test_log',
FILENAME = N'D:\sqldata\Test_log.ldf',
SIZE = 7616KB,
MAXSIZE = 2048GB,
FILEGROWTH = 10%
)
COLLATE Chinese_PRC_CI_AS
GO
--2. 使用新库 [Test_1] , 并删除可能存在的分区函数 [test_partition]
USE [Test_1]
GO
--若分区函数存在则先drop掉
IF EXISTS (
SELECT *
FROM sys.partition_functions
WHERE NAME = N'test_partition'
)
DROP PARTITION FUNCTION [test_partition]
GO
--3. 创建分区函数 [test_partition] , 确定分区的字段类型和分区范围
/*创建分区函数给后面的分区方案使用,分区函数很简单就是指定一个范围确定在某个值为什么的时候放在那个分区上*/
--新建一个简单的分区函数,该函数以1000为界分两个区
CREATE PARTITION FUNCTION test_partition(INT)
AS
RANGE LEFT FOR VALUES (1000)
GO
--4. 删除可能存在的分区方案 [test_scheme]
/*看分区方案是否存在,若存在先drop掉*/
IF EXISTS (
SELECT *
FROM sys.partition_schemes
WHERE NAME = N'test_scheme'
)
DROP PARTITION SCHEME test_scheme
GO
--5. 创建分区方案 [test_scheme], 为分区方案指定分区函数, 并指定分区函数中分的组要放在当个文件组上
--创建分区方案,分区方案需要指定一个分区函数,并指定在分区函数中分的区需要放在哪一个文件组上
CREATE PARTITION SCHEME test_scheme
AS
PARTITION [test_partition] TO (test_A, test_B)
GO
--6. 创建测试表 [student] , 注 ON 指定了分区方案, 而且指定了分区函数的字段
--创建分区表
IF OBJECT_ID('student', 'U') IS NOT NULL
DROP TABLE student;
GO
CREATE TABLE student
(
id INT IDENTITY(1, 1) NOT NULL,
NAME VARCHAR(10) NOT NULL,
class INT NOT NULL,
grade INT
) ON test_scheme(class) --在此处指定该表要使用的分区方案,并将指定分区依据列
GO
--7. 插入测试数据
--随便插入几条数据
INSERT INTO student
VALUES
(
'AQU',
10,
100
); -- 这条数据在A分区上
INSERT INTO student
VALUES
(
'AQU_边界',
1000,
89
); -- 这边数据也在A分区上是个边界,因为我们上面在函数中指定的是RANGE LEFT,所以1000在A分区上
INSERT INTO student
VALUES
(
'BQU',
1001,
90
); -- 这一条肯定是在B分区上了。
GO
--8. 查看 select 数据集的结果, 注意 得到分区序号的方法: $partition.分区函数(分区列)
--最后看看结果。$partition.分区函数(分区列)可以返回某一行所在的分区序号
SELECT *,
分区序号 = $partition.test_partition(class)
FROM student
GO