zoukankan      html  css  js  c++  java
  • SQL server 2005 中的分区表(代码示例)

    在SQL server 2005中一个新的特性——分区表。

    建立分区表的步骤:
    1 创建数据库(必须在多个文件组中)
    2 创建分区函数
    3 创建分区Scheme
    4 创建分区表

    USE master;
    GO
    IF OBJECT_ID (N'PartitionDataBase'IS NOT NULL
    DROP DATABASE PartitionDataBase;
    GO
    /* CREATE DATABASE */
    CREATE DATABASE PartitionDataBase
    ON PRIMARY
    (
    NAME 
    = N'File_A_H',FileName = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_AH.mdf'
    ),
    FILEGROUP FileGroup_I_N
    (
    NAME 
    = N'File_I_N',FileName = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_IN.mdf'
    ),
    FILEGROUP FileGorup_M_Z
    (
    NAME 
    = N'File_M_Z',FileName = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_MZ.mdf'
    )
    GO
    USE PartitionDataBase;
    GO
    /* 创建分区函数 */
    CREATE PARTITION FUNCTION StaffNameRangePFN(varchar(100))
    AS
    RANGE 
    LEFT FOR VALUES ('H','M')
    GO
    /* 创建分区Scheme */
    CREATE PARTITION SCHEME StaffNamePScheme 
    AS
    PARTITION StaffNameRangePFN
    TO ([PRIMARY], FileGroup_I_N, FileGorup_M_Z)
    GO
    IF OBJECT_ID (N'Staff'IS NOT NULL
    DROP TABLE dbo.Staff;
    /* 创建分区表 */
    CREATE TABLE [dbo].[Staff]  
    (
    [StaffName] [varchar](100NOT NULL
    )
    ON StaffNamePScheme ([StaffName])
    GO
    CREATE CLUSTERED INDEX IX_StaffName ON [Staff]([StaffName])
    GO

    下面的代码将Staff表按StaffName分布到三个分区中。

    插入一些测试数据

    INSERT INTO [dbo].[Staff]
    SELECT FirstName FROM AdventureWorks.Person.Contact

    运行下面的代码,看看数据的分布情况

    SELECT 
        $partition.StaffNameRangePFN(StaffName) 
    AS [Partition Number],
        
    MIN(StaffName) AS [Min StaffName],
        
    MAX(StaffName) AS [Max StaffName],
        
    COUNT(StaffName) AS [Rows In Partition]
    FROM dbo.staff AS o
    GROUP BY $partition.StaffNameRangePFN(StaffName)
    ORDER BY [Partition Number]

    看起来还不错。三个分区都差不多的数据

    我们来打破这个平衡

    INSERT INTO [dbo].[Staff]
    SELECT AddressLine1 FROM AdventureWorks.Person.Address

    修改分区表的步骤:
    1 添加一个文件组到数据库
    2 修改分区Scheme
    3 修改分区函数

    Use master
    GO
    ALTER DATABASE PartitionDataBase ADD FILEGROUP FileGroup_0_9
    GO
    ALTER DATABASE PartitionDataBase
    ADD FILE 
    (
    NAME 
    = N'File_0_9',FileName = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_09.mdf'
    )
    TO FILEGROUP FileGroup_0_9
    GO
    Use PartitionDataBase
    GO
    ALTER PARTITION SCHEME StaffNamePScheme
    NEXT USED FileGroup_0_9;
    GO
    ALTER PARTITION FUNCTION StaffNameRangePFN()
    SPLIT RANGE (
    'A');
    GO

    请注意修改和创建之间的一些差别

    再用上面的代码看看数据分布的情况。

  • 相关阅读:
    Codeforces 845E Fire in the City 线段树
    Codeforces 542D Superhero's Job dp (看题解)
    Codeforces 797F Mice and Holes dp
    Codeforces 408D Parcels dp (看题解)
    Codeforces 464D World of Darkraft
    Codeforces 215E Periodical Numbers 容斥原理
    Codeforces 285E Positions in Permutations dp + 容斥原理
    Codeforces 875E Delivery Club dp
    Codeforces 888F Connecting Vertices 区间dp (看题解)
    Codeforces 946F Fibonacci String Subsequences dp (看题解)
  • 原文地址:https://www.cnblogs.com/goodspeed/p/270759.html
Copyright © 2011-2022 走看看