zoukankan      html  css  js  c++  java
  • sqlserver 2008表分区操作

    表分区操作步骤

    1、设计表进行分区的方案,水平分区、垂直分区

           a、水平切割将减少表的行数,这样可以将历史数据归档,减少表大小,提高访问速度。

           b、垂直切割将分为主表和从表方式,将主要的列字段存放在主表中,次要的列字段存放在从表中,减少对不必要字段的访问和存放,只在需要的时候进行联表查询

    2、根据业务规则确定按照日期或其他的分区原则选择分区列

    3、根据选择的分区列,确定分区数,创建对应的文件组和数据文件数

          最好一个分区对应一个文件组和一个数据文件,分区数据文件最好分布在不同的磁盘上,这样有利于数据库并行操作,特别是多核cpu对I/O的访问

    4、创建分区函数

          参见下面说明

    5、创建分区架构

          参见下面说明

    6、创建分区表

          参见下面说明

    7、创建分区索引,分区聚集唯一索引

           a、分区索引可以使用不同的分区架构,但必须使用相同的分区函数,存储在不同的文件组中,但是这样讲导致索引与数据表无法对齐。

           b、建议尽量使用相同的分区架构,确保索引和数据表对齐,这样特别有利于滑动窗口方式的查询操作。

           c、大型的分区表要有唯一聚集索引或唯一索引

                 唯一索引必须包含分区列,这样才能让sqlserver只访问需要的分区


    表分区与分表操作的区别

    • 在sqlserver 2005之前,只能使用分表方式进行分区操作,将大表拆分成多个小表,然后通过union 方式拼接成一个视图。这种方式将给开发人员新增工作量。当需要插入更新表记录时,需要查找记录所在的数据表。
    • 在sqlserver 2005之后,微软提供表分区操作,将大表拆分成多个实际小表,大表变成逻辑表,对开发人员而言操作逻辑表与原来大表是一样的,不受影响。


    创建表分区架构

    CREATE PARTITION SCHEME [Sln_Partition_Tbl_IntegeralLog]
    AS PARTITION [Fn_Partition_Tbl_IntegeralLog] 
    TO ([文件组名1], [文件组名2], [文件组名3])
    GO
    

    修改表分区架构


    删除表分区架构

    IF  EXISTS 
    (
        SELECT * 
        FROM sys.partition_schemes WHERE name = N'Sln_Partition_Tbl_IntegeralLog'
    )
    DROP PARTITION SCHEME [Sln_Partition_Tbl_IntegeralLog]
    GO
    
    

    创建表分区函数

    CREATE PARTITION FUNCTION [Fn_Partition_Tbl_IntegeralLog](datetime) 
    AS RANGE LEFT 
    FOR VALUES (N'2010-01-01T00:00:00.000', N'2011-01-01T00:00:00.000', N'2012-01-01T00:00:00.000', N'2013-01-01T00:00:00.000', N'2014-01-01T00:00:00.000')
    GO
    

    修改表分区函数


    删除表分区函数

    IF  EXISTS 
    (
        SELECT * 
        FROM sys.partition_functions 
        WHERE name = N'Fn_Partition_Tbl_IntegeralLog'
    )
    DROP PARTITION FUNCTION [Fn_Partition_Tbl_IntegeralLog]
    GO
    

    查询表分区数据分布情况

      select  $partition.Fn_Partition_Tbl_IntegeralLog(tC_Time) [分区编号],
              count(*) [分区编号],
              min(tC_Time) [起始分界],
              max(tC_Time) [终止分界]
      from dbo.Tbl_IntegeralLog
     group by $partition.Fn_Partition_Tbl_IntegeralLog(tC_Time)


    创建分区表

    CREATE TABLE Tbl_IntegeralLog
    (
        tC_Id   INT is not null,
        tC_Time datetime default getdate(),
        PRIMARY KEY (ID)
    ) ON Fn_Partition_Tbl_IntegeralLog(tC_Time)
    GO


    查询表记录分配到哪个分区中

    SELECT *, $PARTITION.Fn_Partition_Tbl_IntegeralLog(tC_Time)
    FROM Tbl_IntegeralLog


    查询分区2中的记录信息

    select * 
    from Tbl_IntegeralLog 
    where $PARTITION.Fn_Partition_Tbl_IntegeralLog([tC_Time])= 2


    查询分区函数、分区边界值、分区架构

    select * from sys.partition_functions
    select * from sys.partition_range_values
    select * from sys.partition_schemes


    根据分区字段的值查询出分区号

     SELECT $PARTITION.Fn_Partition_Tbl_IntegeralLog('2011-01-01')

    以下目录视图包含数据库、表和索引级别的分区信息,以及有关单个分区函数和分区方案的信息。

    获取有关单个分区函数的信息

    获取有关分区函数的单个参数的信息

    获取有关分区函数边界值的信息

    获取有关数据库中所有分区方案的信息

    获取有关单个分区方案的信息

    获取有关数据库中所有分区的信息

    获取有关表或索引的分区信息




  • 相关阅读:
    svn问题(队列)
    linux的七大运行级别及级别修改
    Elasticsearch配置文件说明
    openstack-swift云存储部署(二)
    openstack-swift云存储部署(一)
    今天发现一些很有意思的ubuntu命令
    python使用xlrd 操作Excel读写
    Python初记
    SQL Server常用命令
    SQL Server 流程控制
  • 原文地址:https://www.cnblogs.com/wala-wo/p/5119294.html
Copyright © 2011-2022 走看看