zoukankan      html  css  js  c++  java
  • SqlServer Partition 分区表

    分区表

    测试版本:   

        Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
        Feb 20 2014 20:04:26
        Copyright (c) Microsoft Corporation
        Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

    ------新加文件组------

    ALTER DATABASE [PARTITION] ADD FILEGROUP  LogFG1
    GO
    ALTER DATABASE [PARTITION] ADD FILEGROUP  LogFG2
    GO
    ALTER DATABASE [PARTITION] ADD FILEGROUP  LogFG3
    GO
    ALTER DATABASE [PARTITION] ADD FILEGROUP  LogFG4
    GO

    ---添加文件组文件-------

    ---初始大小和增长速度和PRIMARY文件组保持一致------------

    ALTER DATABASE  [PARTITION] ADD FILE
    (
    NAME=N'LogFile1',
    FILENAME=N'F:PartitionLogData1.ndf',
    SIZE = 5120KB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 10240KB
    )TO FILEGROUP LogFG1
    GO

    ALTER DATABASE  [PARTITION] ADD FILE
    (
    NAME=N'LogFile2',
    FILENAME=N'F:PartitionLogData2.ndf',
    SIZE = 5120KB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 10240KB
    )TO FILEGROUP LogFG2
    GO

    ALTER DATABASE  [PARTITION] ADD FILE
    (
    NAME=N'LogFile3',
    FILENAME=N'F:PartitionLogData3.ndf',
    SIZE = 5120KB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 10240KB
    )TO FILEGROUP LogFG3
    GO

    ALTER DATABASE  [PARTITION] ADD FILE
    (
    NAME=N'LogFile4',
    FILENAME=N'F:PartitionLogData4.ndf',
    SIZE = 5120KB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 10240KB
    )TO FILEGROUP LogFG4
    GO

    SELECT * FROM SYS.FILEGROUPS---文件组

    ----创建分区函数------

    CREATE PARTITION  FUNCTION PF_LOG (DATETIME)
    AS   RANGE LEFT FOR VALUES
    (
    '2016-01-31 23:59:59.997',
    '2016-02-29 23:59:59.997',
    '2016-03-31 23:59:59.997'
    )
    GO

    当月的最大时间和最小时间

    ---最小时间--

    SELECT CONVERT(datetime,CONVERT(char(8),getdate(),120)+'1')

    ------当月最大时间------------------
    SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,getdate()),120)+'1')+' 23:59:59.998'

    ------创建分区方案----

    CREATE PARTITION SCHEME PS_LOG AS PARTITION PF_LOG
    TO
    (
    LogFG1,
    LogFG2,
    LogFG3,
    LogFG4
    )
    GO

    ----创建分区表-----

    CREATE TABLE Switch_Log
    (
    ID INT IDENTITY(1,1),
    NAME1 CHAR(5),
    NAME2 CHAR(5),
    DATE1 DATETIME NOT NULL,
    )
    ON PS_LOG(DATE1)
    GO

    -------创建分区索引以及主键-----------

    (创建唯一性索引,索引要包含分区列)
    CREATE CLUSTERED INDEX IX_DATE1 ON Switch_Log(DATE1)
    ALTER TABLE Switch_Log ADD  CONSTRAINT PK_Log PRIMARY KEY NONCLUSTERED (ID,DATE1)
    CREATE INDEX IX_NAME1 ON Switch_Log(NAME1)

    ------插入测试数据-----

    INSERT INTO Switch_Log (NAME1,NAME2,DATE1)
    VALUES ('AAAAA','BBBBB','2016-01-01 00:00:00.000')
    GO 100000

    INSERT INTO Switch_Log (NAME1,NAME2,DATE1)
    VALUES ('CCCCC','DDDDD','2016-02-01 00:00:00.000')
    GO 100000

    INSERT INTO Switch_Log (NAME1,NAME2,DATE1)
    VALUES ('EEEEE','FFFFF','2016-03-01 00:00:00.000')
    GO 100000

    -------------测试1-----------------

    SELECT $PARTITION.PF_LOG('2016-01-02 00:00:00.000')

    查找某个日期所在的分区

    -------测试SWITCH-------------------

    CREATE TABLE Switch_Log1
    (
    ID INT NOT NULL,
    NAME1 CHAR(5),
    NAME2 CHAR(5),
    DATE1 DATETIME NOT NULL,
    ) ON PS_LOG(DATE1)
    GO

    ---Switch目标表时,目标表要和分区表聚集索引要保持一致,数据是按聚集排列的,switch秒级别需要两个表聚集一致

    --- 如果目标表swtich 分区表 则所有索引都要保持一致

    CREATE CLUSTERED INDEX IX_DATE1 ON Switch_Log1(DATE1)

    ALTER TABLE Switch_Log1 ADD  CONSTRAINT PK_Log1 PRIMARY KEY NONCLUSTERED (ID,DATE1)
    CREATE INDEX IX_NAME1 ON Switch_Log1(NAME1)

    ----SWITCH--------------

    ALTER TABLE [dbo].[Switch_Log] SWITCH PARTITION 1 TO [dbo].[Switch_Log1] PARTITION 1
    ALTER TABLE [dbo].[Switch_Log1] SWITCH PARTITION 1 TO [dbo].[Switch_Log] PARTITION 1

    ------MERGE--------

    ALTER PARTITION FUNCTION     [PF_LOG]() MERGE  RANGE ('2016-01-31 23:59:59.997')

    合并分区 根据 开始分区函数定义LEFT/RIGHT 定义来 删除分区范围

    比如: 测试案例,我们用了left ,则第一分区的数据会合并到第二分区;RIGHT反之亦然。

    -----------------SPLIT------------------

    ALTER PARTITION SCHEME     [PS_LOG] NEXT USED LogFG1
    ALTER PARTITION FUNCTION     [PF_LOG]() SPLIT RANGE ('2016-01-31 23:59:59.997')

    先指定分区方案,再新加分区函数范围。

    新的分区建成;

    查询所有分区,所在的区、页数、行数、分区范围;


    SELECT OBJECT_NAME(INS.OBJECT_ID)as '表名',
    PS.partition_number AS '分区',
    FG.NAME as '文件组',
    AU.TOTAL_PAGES AS '页数',
    CASE boundary_value_on_right WHEN 1 THEN 'RIGHT'
    ELSE 'LEFT' END as 'L/R',
    VALUE AS '分区界限',
    PS.ROWS AS '行数',
    CASE  when ps.data_compression=0 then '未压缩'
    ELSE  '压缩'
    END AS '是/否压缩'
    FROM SYS.PARTITIONS PS
    INNER JOIN SYS.INDEXES INS
    ON  PS.OBJECT_ID=INS.OBJECT_ID
    AND PS.INDEX_ID=INS.INDEX_ID
    JOIN  SYS.partition_schemes PSS
    ON PSS.data_space_id=INS.data_space_id
    JOIN SYS.partition_functions PF
    ON PF.function_id=PSS.function_id
    LEFT JOIN SYS.partition_range_values PRV
    ON PRV.function_id=PF.function_id
    AND PS.partition_number=PRV.boundary_id
    JOIN SYS.destination_data_spaces DS
    ON DS.partition_scheme_id=PSS.data_space_id
    AND DS.destination_id=PS.partition_number
    JOIN SYS.FILEGROUPS FG
    ON DS.destination_id=FG.data_space_id
    JOIN (SELECT CONTAINER_ID,SUM(TOTAL_PAGES)AS TOTAL_PAGES
    FROM  SYS.allocation_units GROUP BY CONTAINER_ID) AS AU
    ON AU.container_id=PS.partition_id
    WHERE INS.INDEX_ID IN (0,1)

    image

    -----删除分区函数----刚好和我们创建顺序相反------

    删除架构下面的表对象---架构-----函数----组文件------组---

    ALTER DATABASE [PARTITION] REMOVE FILE LogFile1
    ALTER DATABASE [PARTITION] REMOVE FILE LogFile2
    ALTER DATABASE [PARTITION] REMOVE FILE LogFile3
    ALTER DATABASE [PARTITION] REMOVE FILE LogFile4

    ALTER DATABASE [PARTITION] REMOVE FILEGROUP LogFG1
    ALTER DATABASE [PARTITION] REMOVE FILEGROUP LogFG2
    ALTER DATABASE [PARTITION] REMOVE FILEGROUP LogFG3
    ALTER DATABASE [PARTITION] REMOVE FILEGROUP LogFG4

  • 相关阅读:
    sharepoint无法到搜索人员
    sharepoint 自定义操作 CustomAction
    sharepoint 自定列表总结
    向数据表中插入字符序号,例如"001""002"
    通过sharepoint 客户脚本,验证列表添加页面上的时间
    WebService入门(1)
    Java虚拟机1:什么是Java
    SFTP服务搭建
    Shell学习——特殊变量
    js知识点~扁平数据结构转Tree
  • 原文地址:https://www.cnblogs.com/kingwwz/p/5885423.html
Copyright © 2011-2022 走看看