当前位置: 代码迷 >> Sql Server >> 对分区来说, 什么样的景况可是可以提高效率的
  详细解决方案

对分区来说, 什么样的景况可是可以提高效率的

热度:12   发布时间:2016-04-24 18:15:09.0
对分区来说, 什么样的情况可是可以提高效率的?
--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:\DB\partition\test_1.mdf',
                                        SIZE = 10240KB,
                                        MAXSIZE = UNLIMITED,
                                        FILEGROWTH = 1024KB
                                    ),
 FILEGROUP [test_A] 
(
    NAME = N'Test_A',
    FILENAME = N'D:\DB\partition\test_A.ndf',
    SIZE = 1024KB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1024KB
),
FILEGROUP [test_B] 
(
    NAME = N'Test_B',
    FILENAME = N'D:\DB\partition\test_B.ndf',
    SIZE = 1024KB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1024KB
)
 LOG ON 
(
    NAME = N'Test_log',
    FILENAME = N'D:\DB\partition\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] ALL TO (test_A) --和 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
  相关解决方案