• Partition1:新建分区表


    未分区的表,相当于只有一个分区,只能存储在一个FileGroup中;对表进行分区后,每一个分区都存储在一个FileGroup,或分布式存储在不同的FileGroup中。对表进行分区的过程,实际上是将逻辑上完整的一个表,按照特定的字段拆分成多个分区,分散到相同或不同的FileGroup中,每一个部分叫做表的一个分区(Partition),一个分区实际上是一个独立的,内部的物理表。也就是说,分区表在逻辑上是一个表,而在物理上是多个完全独立的表。

    分区(Partition)的特性是:

    • 每一个Partition在FileGroup中都独立存储,分区之间是相互独立的
    • 每一个parititon都属于唯一的表对象,
    • 每一个Partition 都有唯一的ID,
    • 每一个Partition都有一个编号(Partition Number),同一个表的分区编号是唯一的,从1开始递增;

    当表分区后,加锁的粒度从表级别降低到分区级别,这使得对一个分区执行更新操作,同时不会影响另一个分区的读取操作。因此,分区可以降低并发查询系统产生死锁和阻塞的概率,提高数据操作的并发度。在创建表时,使用On 子句指定table存储的逻辑位置:

    • ON  filegroup | "default" :表示逻辑存储位置是单一的FileGroup;
    • ON  partition_scheme_name ( partition_column_name ) :表示逻辑存储位置是分区架构,按照partition_column将table拆分成多个partition,每一个partition都存储在一个指定的Filegroup中;
    CREATE TABLE  schema_name . table_name 
    (  <column_definition>  )
    [ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ] 
    [ WITH ( <table_option> [ ,...n ] ) ]

    从存储空间来理解分区,Partition实际上是表的一部分逻辑存储空间。未分区表的逻辑存储位置是FileGroup,分区表的逻辑存储位置是Partition Scheme,但是,FileGroup指定一个特定的逻辑存储位置,而Partition Scheme是分布式的,能够将数据分布式存储到不同的FileGroup中去。

    跟逻辑存储空间相对应的是物理存储空间,物理存储空间是由File指定的,FileGroup是File的集合,每一个File都属于唯一的FileGroup。将table的存储空间拆分到不同的FileGroup中,将table的物理存储空间分布到不同的File中,只不过,不再是某一个FileGroup。实际存储数据的文件仍然是File。

    在SQL Server中,File Group和Partition Scheme统称为Data Sapce(数据空间),默认的Data Space是Primary,即主文件组。

    一,新建分区表分为三步

    Step1, 创建分区函数

    分区函数的作用是提供分区字段的类型和分区的边界值,进而决定分区的数量

    CREATE PARTITION FUNCTION [pf_int](int) 
    AS RANGE LEFT 
    FOR VALUES (10, 20)

    分区函数pf_int 的含义是按照int类型分区,分区的边界值是10,20,left表示边界值属于左边界。两个边界值能够分成三个分区,别是(-infinite,10],(10,20],(20,+infinite)。

    Step2,创建分区架构(Scheme)

    分区架构的作用是为Parition分配FileGroup,在逻辑上,Partition Scheme和FileGroup是等价的,都是数据存储的逻辑空间,只不过Partition Scheme指定的是多个FileGroup。

    CREATE PARTITION SCHEME [ps_int] 
    AS PARTITION [pf_int] 
    TO ([PRIMARY], [db_fg1], [db_fg1])

    不管是在不同的FileGroup中,还是在相同的FileGroup中,分区都是独立存储的。

    分区scheme的所有分区都存储到相同的文件组中:

    CREATE PARTITION SCHEME [ps_int] 
    AS PARTITION [pf_int] 
    ALL TO ([PRIMARY])

    Step3,新建分区表

    新建分区表,实际上是在创建Table时,使用on子句指定数据存储的逻辑位置是分区架构(Partition Scheme)

    create table dbo.dt_test
    (
        ID int,
        code int
    )
    on [ps_int] (id)

    二,查看分区编号(Partition Number)

    分区编号(Partition Number) 从1开始,从最左边的分区向右依次递增+1,边界值最小的分区编号是1,

    例如,对于以下分区函数:

    CREATE PARTITION FUNCTION pf_int_Left (int)
    AS 
    RANGE LEFT 
    FOR VALUES (10,20);

    分区的边界值(Boundary Value)是10,20, 边界值属于左边界(Range Left),该分区函数 pf_int_Left 划分了三个分区(Partition),范围区间是:(-infinite,10], (10,20], (20,+infinite),(小括号表示不包括边界值,中括号表示包括边界值),系统分配的分区编号分别是:1,2,3。用户可以通过使用$Partition函数 查看分区编号,调用语法格式是:

    $Partition.Partition_Function(Partition_Column_Value)

    例如,通过$Partition函数 查看分区列值为21时,该行数据所在的分区编号:

    select $Partition.pf_int_left(21)

    由于分区列值是21, 属于范围(20,+infinite),因此分区编号是:3。

    参考文档:

    Create Partitioned Tables and Indexes

  • 相关阅读:
    mysql日期转化
    跳来跳去,到底去大公司还是小公司?
    年度重大升级,IntelliJ IDEA 2019.2 稳定版发布
    3年Java,鏖战腾讯
    重磅!挑战Oracle,华为将开源 GaussDB 数据库
    厉害了,Java EE 再次更名为 Jakarta EE
    彻底干掉恶心的 SQL 注入漏洞, 一网打尽!
    PostgreSQL 荣获 2019 年 O'Reilly 终身成就奖
    Intellij IDEA 智能补全的 10 个姿势,简直不能太牛逼!
    注意,千万不要打断工作中的程序员
  • 原文地址:https://www.cnblogs.com/ljhdo/p/5016007.html
Copyright © 2020-2023  润新知