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

来源:互联网 发布:java Object not found 编辑:程序博客网 时间:2024/06/07 08:58

原文:点击打开链接

--0. 预备==>删除可能存在的库 [ Test_1 ]USE [master]GOIF EXISTS (       SELECT *       FROM   sys.databases       WHERE  NAME = 'Test_1'   )    DROP DATABASE Test_1GO--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_ASGO--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)ASRANGE 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_schemeGO--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;GOCREATE 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 studentVALUES  (    'AQU',    10,    100  ); -- 这条数据在A分区上INSERT INTO studentVALUES  (    'AQU_边界',    1000,    89  ); -- 这边数据也在A分区上是个边界,因为我们上面在函数中指定的是RANGE LEFT,所以1000在A分区上INSERT INTO studentVALUES  (    'BQU',    1001,    90  ); -- 这一条肯定是在B分区上了。GO--8. 查看 select 数据集的结果, 注意 得到分区序号的方法: $partition.分区函数(分区列)--最后看看结果。$partition.分区函数(分区列)可以返回某一行所在的分区序号SELECT *,       分区序号 = $partition.test_partition(class)FROM   studentGO