提高数据库效率的利器——分区

原文:点击打开链接

--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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值