分区表 分区视图

分区表可以从物理上将一个大表分成几个小表,但是从逻辑上来看,还是一个大表。

什么时候需要分区表

  1. 数据库中某个表中的数据很多。

  2. 数据是分段的

分区的方式

  • 水平分区

    水平表分区就是将一个具有大量数据的表,进行拆分为具有相同表结构的若干个表;

  • 垂直分区

    垂直表分区就是把一个拥有多个字段的表,根据需要进行拆分列,然后根据某一个字段进行关联

如何创建分区表

  1. 创建数据库文件组

可以点击数据库属性在文件组里面添加

alter database <数据库名> add filegroup <文件组名>

---创建数据库文件组
alter database testSplit add filegroup ByIdGroup1
alter database testSplit add filegroup ByIdGroup2
  1. 创建数据库文件

可以点击数据库属性在文件里面添加

将不同的文件放在文件组中。当然一个文件组中也可以包含多个不同的文件。

如果可以的话,将不同的文件放在不同的硬盘分区里,最好是放在不同的独立硬盘里。要知道IQ的速度往往是影响SQL Server运行速度的重要条件之一。将不同的文件放在不同的硬盘上,可以加快SQL Server的运行速度。

alter database <数据库名称> add file <数据标识> to filegroup <文件组名称>

--<数据标识> (name:文件名,fliename:物理路径文件名,size:文件初始大小kb/mb/gb/tb,filegrowth:文件自动增量kb/mb/gb/tb/%,maxsize:文件可以增加到的最大大小kb/mb/gb/tb/unlimited)

alter database testSplit add file
(name=N'ById1',filename=N'J:\Work\数据库\data\ById1.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup1
alter database testSplit add file
(name=N'ById2',filename=N'J:\Work\数据库\data\ById2.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup2
  1. 创建分区表

    1. 创建分区函数

    目的是用来规范不同数据存放到不同目录的标准,简单讲就是如何分区

    分区函数只定义了分区的方法,此方法具体用在哪个表的那一列上,则需要在创建表或索引是指定

     ```sql
    create partition function 分区函数名(<分区列类型>) as range [left/right]
    for values (每个分区的边界值,....) --创建分区函数
    CREATE PARTITION FUNCTION [bgPartitionFun](int) AS RANGE LEFT FOR VALUES (N'1000000', N'2000000', N'3000000', N'4000000', N'5000000', N'6000000', N'7000000', N'8000000', N'9000000', N'10000000') --删除分区 --删除分区语法
    drop partition function <分区函数名> --删除分区函数 bgPartitionFun
    drop partition function bgPartitionFun --只有没有应用到分区方案中的分区函数才能被删除
    ```
    1. 创建分区方案

      指定分区对应的文件组

      分区函数必须关联分区方案才能有效,然而分区方案指定的文件组数量必须与分区数量一致,哪怕多个分区存放在一个文件组中。

      --创建分区方案语法
      create partition scheme <分区方案名称> as partition <分区函数名称> [all]to (文件组名称,....) --创建分区方案,所有分区在一个组里面
      CREATE PARTITION SCHEME [bgPartitionSchema] AS PARTITION [bgPartitionFun] TO ([ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1]) --删除分区方案 --删除分区方案语法
      drop partition scheme<分区方案名称> --删除分区方案 bgPartitionSchema
      drop partition scheme bgPartitionSchema1
    2. 创建分区表

    如果在表中创建主键或唯一索引,则分区依据列必须为该列

     ```sql
    --创建分区表语法
    create table <表名> (
    <列定义>
    )on<分区方案名>(分区列名) --创建分区表
    create table BigOrder (
    OrderId int identity,
    orderNum varchar(30) not null,
    OrderStatus int not null default 0,
    OrderPayStatus int not null default 0,
    UserId varchar(40) not null,
    CreateDate datetime null default getdate(),
    Mark nvarchar(300) null
    )on bgPartitionSchema(OrderId)
    ```
    1. 创建分区索引

      --创建分区索引语法
      create <索引分类> index <索引名称>
      on <表名>(列名)
      on <分区方案名>(分区依据列名) --创建分区索引
      CREATE CLUSTERED INDEX [ClusteredIndex_on_bgPartitionSchema_635342971076448165] ON [dbo].[BigOrder]
      (
      [OrderId]
      )WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [bgPartitionSchema]([OrderId]) --使用分区索引查询,可以避免多个cpu操作多个磁盘时产生的冲突。
    2. 查看分区表明细信息

      --查看分区依据列的指定值所在的分区
      --查询分区依据列为10000014的数据在哪个分区上
      select $partition.bgPartitionFun(2000000) --返回值是2,表示此值存在第2个分区 --查看分区表中,每个非空分区存在的行数 --查看分区表中,每个非空分区存在的行数
      select $partition.bgPartitionFun(orderid) as partitionNum,count(*) as recordCount
      from bigorder
      group by $partition.bgPartitionFun(orderid) --查看指定分区中的数据记录
      ---查看指定分区中的数据记录
      select * from bigorder where $partition.bgPartitionFun(orderid)=2

分区拆分合并移动

  1. 拆分分区

    在分区函数中新增一个边界值,即可将一个分区变为2个。

    --分区拆分
    alter partition function bgPartitionFun()
    split range(N'1500000') --将第二个分区拆为2个分区
  2. 合并分区

    与拆分分区相反,去除一个边界值即可。

    --合并分区
    alter partition function bgPartitionFun()
    merge range(N'1500000') --将第二第三分区合并

SQL Server【提高】分区表的更多相关文章

  1. SQL Server 2005 分区表实践——分区切换

    本文演示了 SQL Server 2005 分区表分区切换的三种形式: 1. 切换分区表的一个分区到普通数据表中:Partition to Table: 2. 切换普通表数据到分区表的一个分区中:Ta ...

  2. SQL Server提高事务复制效率优化(一)总体概述

      随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...

  3. sql server 小记——分区表(上)

    我们知道很多事情都存在一个分治的思想,同样的道理我们也可以用到数据表上,当一个表很大很大的时候,我们就会想到将表拆 分成很多小表,查询的时候就到各个小表去查,最后进行汇总返回给调用方来加速我们的查询速 ...

  4. sql server 小记——分区表

    我们知道很多事情都存在一个分治的思想,同样的道理我们也可以用到数据表上,当一个表很大很大的时候,我们就会想到将表拆 分成很多小表,查询的时候就到各个小表去查,最后进行汇总返回给调用方来加速我们的查询速 ...

  5. 关于SQL Server中分区表的文件与文件组的删除(转)

    在SQL Server中对表进行分区管理时,必定涉及到文件与文件组,关于文件与文件组如何创建在网上资料很多,我博客里也有两篇相关转载文件,可以看看,我这就不再细述,这里主要讲几个一般网上很少讲到的东西 ...

  6. SQL Server提高并发查询效率

    同事写了个程序用创建多个线程使用ado同时对同个数据库进行相同的查询,涉及2张数据表的联查.当线程数非常多的情况下,读取数据的效率就会变得很慢,例如50个线程同时查询大概3000条数据,查询完成后通过 ...

  7. SQL Server 查看分区表(partition table)的分区范围(partition range)

    https://www.cnblogs.com/chuncn/archive/2009/02/20/1395165.html SQL Server 2005 的分区表(partition table) ...

  8. SQL Server 提高执行效率的16种方法

    1.尽量不要在where中包含子查询; 关于时间的查询,尽量不要写成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01′,'yyyy-m ...

  9. SQL Server提高事务复制效率优化(四)修改数据同步过程优化

    1.原理       我说的数据修改同步过程指的是在快照生成完毕,分发代理将快照应用于订阅服务器完成订阅服务器初始化后,发布服务器后续的更改同步到订阅服务器过程,这也就是我们常常关注的延迟.此过程主要 ...

  10. SQL Server提高事务复制效率优化(二)快照初始化优化

    测试数据表量1500w+,使用初始化默认的快照代理参数,复制的三个过程包括快照初始化,订阅初始化和数据修改复制,主要对快照代理.分发代理.日志读取代理分别作了参数优化,并给出优化前后的对照实验测试. ...

随机推荐

  1. 记录篇-浪潮服务器raid卡

    在说raid卡之前,首先,我们要明确,不同的raid卡型号,会有不同的配置方式,但是总体来说是大同小异的 这里举例浪潮机架式服务器经常用到的raid卡型号:  PM8204      (其实像3108 ...

  2. form表单enctype扩展

    enctype就是encodetype就是编码类型的意思. multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思. 需要注意的是:默认情况下,enc ...

  3. MySQL5.7升级版本到8.0

    升级二进制包安装的MySQL In-Place Upgrade(替代升级) 替代升级涉及到shutdown down旧版本的MySQL,用新版本的包替代旧版本的二进制包,用存在的数据文件目录重启MyS ...

  4. 回归分析-2.X 简单线性回归

    2.1 简单线性回归模型 y与x之间的关系假设 \(y=\beta_0+\beta_1x+\varepsilon\) \(E(\varepsilon|x)=0\) \(Var(\varepsilon| ...

  5. 判断PC端与移动端跳转

    var mobile_bs = {   versions: function () {     var u = navigator.userAgent;     return {       trid ...

  6. go on

    人生当中总是有你能力不及的范围,但是如果在你能力所及的范畴内你尽到了自己全部的努力,那你还有什么可以遗憾的呢?

  7. vue部署样式错乱

    1 <style scoped> 2 .el-menu-vertical-demo:not(.el-menu--collapse) { 3 border: none; 4 } 5 .sub ...

  8. 2021年爆出log4j漏洞修复

    (1)用户可自查系统是否引用 Apache log4j-core 依赖,没有引用则不受漏洞影响. (2)排查系统中日志配置是否采用远程动态加载模式.(3)排查系统中是否正在使用JDBCAppender ...

  9. 图片在div中居中

    要将一张图片垂直和水平居中在一个 <div> 元素中,你可以使用以下 CSS 样式: div { display: flex; justify-content: center; align ...

  10. CH582m串口透传程序

    目录 参考了沁恒官网22年1月更新的CH583EVT包中的UART1例程 功能:上位机通过串口1发送指令规定串口2和3的波特率,实现串口2和3之间的数据透传 担心串口3的接收中断会被串口2的发送中断打 ...