分区表 分区视图

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

什么时候需要分区表

  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. 魔兽世界2009年更换代理,九城CEO至全体员工公开信

    尊敬的全体第九城市员工, 最近一段时间以来,有关九城将要失去<魔兽世界>代理权的说法甚嚣尘上,各种传言四起.在目前来自<魔兽世界>的收入仍占九城收入绝大部分的情况下,对于外界的 ...

  2. docker安装xxl-job-admin

    拉取镜像 docker pull xuxueli/xxl-job-admin:2.3.1 运行容器 docker run -d -e PARAMS=" --spring.datasource ...

  3. orm中多表查询示例

    record = session.query(OrderMain, OrderGoods).join(OrderMain, OrderMain.order_code == OrderGoods.ord ...

  4. MySQL单节点变更为主从节点

    环境说明: 操作系统:CentOS 7.6 数据库版本:5.7 为了实验方便,同一台主机部署了两个实例,3306.3307 部署方案可参考 MySQL多实例部署:mysql多实例部署 - 太阳的阳ฅ ...

  5. Too many requests in 1 hour. Try again later.的解决办法

    原因 你的梯子用的人太多了,openAI本身就有问答频率限制. 解决办法 换个相对独立,没那么多人用的梯子,找个"安静点"的地区.

  6. uniapp使用百度地图

    要使用第三方百度地图,首先要去百度地图官方申请一个密钥,之后引入百度地图的API文件,参考使用文档即可开发使用.而在uniapp中是没法直接引入百度地图API文件的,我们要结合uniapp中的web- ...

  7. Win+R 常用命令

      regedit 系统注册表编辑器 osk 打开键盘 msconfig 关闭系统开机启动项 gpedit.msc 本地组策略编辑器 nslookup IP地址侦测器 explorer 打开资源管理器 ...

  8. HCIP-进阶实验03-网络流量路径控制

    HCIP-进阶实验03-网络流量路径控制 实验需求 某城域网网络环境部署规划如图所示,该网络通过OSPF协议进行部署设计,分为四个区域,分别为骨干区域0.普通区域1.2.3.其中普通区域1为特殊区域N ...

  9. 数据驱动之 python + requests + Excel

    数据驱动 是根据数据来测试的,如读取 excel表中的测试用例自动填写测试结果,发送测试报告 包括以下模块: 1.获取用例 2.调用接口 3.校验结果 4.发送测试报告 5.异常处理 6.日志模块 1 ...

  10. mac使用expect登录跳板机后的机器

    两个文档 #!/usr/bin/expect -f #连接文件名字记录 set ip [lindex $argv 0] catch {spawn ssh 1.1.1.1}## ip地址换成自己的 ex ...