首页 > 数据库 >sql server 分区

sql server 分区

时间:2022-12-25 21:57:11浏览次数:40  
标签:分区 server SYS 点击 分区表 sql DATA ID

一.分区表概念

1.1、什么是分区表

分区表是SQL Server2005新引入的概念,这个特性允许把逻辑上的一个表在物理上分为很多部分(即它允许将一个表存储在不同的物理磁盘里),分区表在逻辑上是一个表,而物理上是多个表。

1.2、分区与分表的区别

分区:就是把一张表的数据分成N个区块,从逻辑上看只是一张表,但底层是由N个物理区块组成的。

分表:就是把一张表按一定的规则分解成N个具有独立存储空间的实体表。

1.3、水平分表与垂直分表的区别

水平分表:将一张表中的数据分成多个表且表结构不变。

垂直分表:将一张表按照字段分成不同表且表结构发生改变。

二.分区表优点

2.1、使用多个文件分布数据到多个硬盘中,可以极大地提高IO性能,提升查询速度。

2.2、当一个分区出了问题,不会影响其他分区,仅仅是当前坏的分区不可用,提高了稳定性。

2.3、把一个大表分成若干个小表,则备份和恢复的时候不再需要备份整个表,可以单独备份分区,便于管理。

2.4、将一些不太常用的数据单独存档。

三.分区表使用场景

3.1、数据库中某个表的数据量很大,在查询数据时会明显感觉到速度很慢,这种情况可以考虑分区表。

3.2、数据是分段的,如以年份为分隔的数据,对于当前的数据经常进行增删改查操作,而对于往年的数据几乎不做操作或只做查询操作,这种情况可以考虑分区表。

3.3、对数据的操作如果只涉及一部分数据而非全部数据,这种情况可以考虑分区表。

3.4、如果一张表的数据经常进行增删改查操作,而不管年份之类的因素,这种情况最好不要考虑分区表。

四.创建分区表步骤

4.1、创建数据库文件组
4.2、创建数据库文件

注:应将文件组和文件存放于不同的硬盘甚至不同的服务器中,因为数据的读取瓶颈很大程度在于硬盘的读写速度,多个硬盘存储一个表可以实现负载均衡。

4.3、创建分区函数

即声明分区的标准

4.4、创建分区方案

即哪些区域使用哪个分区函数,形成完整的分区方案。

4.5、创建分区表

五.创建分区表实战演练

数据库:MingDataBaseOld 表:DtbUserLoginLog 分区规则:按照该表的时间划分,按天进行分区,设置5个边界值,对应5个分区。

5.1、数据库点击"右键"->"属性"。

5.2、点击"文件组"->"添加文件组"->分别建立FG20200706、FG20200707、FG20200708、FG20200707、FG20200710等5个文件组->"确定"。

 

 

5.3、点击"文件"->"添加"->分别建立FL20200706、FL20200707、FL20200708、FL20200709、FL20200710等5个文件->选择对应的文件组及存放路径->"确定"。

 

 

5.4、选中DtbUserLoginLog表,点击"右键"->"存储"->"创建分区"->"下一步"。

5.5、选中需要分区的列名。然后点击“下一步”。

5.6、输入分区函数名"DtbUserLoginLog_AddTime"->点击"下一步"。

 

 

5.7、输入分区方案名"DtbUserLoginLog_AddTime"->点击"下一步"。

 

 

5.8、映射分区范围选择"左边界"->点击"设置边界"->开始日期:"2020/07/06"、结束日期:"2020/07/10"、日期范围:"每天"->点击"确定"。

 

 

5.9、依边界值选择相对应的文件组->点击"预计存储空间"可查看行计数及空间信息->点击"下一步"。

 

 

5.10、选择"立即运行"->点击"下一步"->点击"完成"。

 

 

 

 

 

 

 

六.分区表检查

6.1、检查分区函数与分区方案

 

 

6.2、检查分区文件

 

 

七.分区表查询

7.1、查看分区及行计数
 1 SELECT CONVERT(VARCHAR(50),A.NAME) Partition_Scheme,D.Partition_Number,CONVERT(VARCHAR(10),E.NAME) FileGroup,
 2        CONVERT(VARCHAR(19),ISNULL(G.VALUE,''),120) Range_Boundary,STR(D.ROWS,9) Rows
 3 FROM SYS.PARTITION_SCHEMES A INNER JOIN SYS.DESTINATION_DATA_SPACES B ON A.DATA_SPACE_ID=B.PARTITION_SCHEME_ID
 4     INNER JOIN SYS.INDEXES C ON A.DATA_SPACE_ID=C.DATA_SPACE_ID
 5     INNER JOIN SYS.PARTITIONS D ON B.DESTINATION_ID=D.PARTITION_NUMBER AND C.OBJECT_ID=D.OBJECT_ID AND C.INDEX_ID=D.INDEX_ID
 6     INNER JOIN SYS.DATA_SPACES E ON B.DATA_SPACE_ID=E.DATA_SPACE_ID
 7     INNER JOIN SYS.PARTITION_FUNCTIONS F ON A.FUNCTION_ID=F.FUNCTION_ID
 8     LEFT JOIN SYS.PARTITION_RANGE_VALUES G ON F.FUNCTION_ID=G.FUNCTION_ID AND D.PARTITION_NUMBER-F.BOUNDARY_VALUE_ON_RIGHT=G.BOUNDARY_ID
 9 WHERE C.OBJECT_ID=OBJECT_ID('DtbUserLoginLog')    --分区表名
10     AND C.INDEX_ID IN (0,1)
11 ORDER BY Partition_Scheme,D.Partition_Number

 

 

 

7.2、查看文件及文件组
1 SELECT A.[NAME],A.PHYSICAL_NAME,A.[SIZE],A.GROWTH,B.[NAME] [FILEGROUP],B.IS_DEFAULT
2 FROM SYS.DATABASE_FILES A INNER JOIN SYS.FILEGROUPS B ON A.DATA_SPACE_ID=B.DATA_SPACE_ID

 

 

 

标签:分区,server,SYS,点击,分区表,sql,DATA,ID
From: https://www.cnblogs.com/mingcore/p/17004660.html

相关文章

  • 【博学谷学习记录】超强总结,用心分享|狂野架构TiDB与MySQL兼容性对比
    目录TiDB与MySQL兼容性对比3.1TiDB不支持的MySql特性3.2自增ID3.3SELECT的限制3.4视图3.5默认设置差异3.5.1字符集3.5.2排序规则3.5.3大小写敏感3.5.3.1参数解释......
  • Windows Server 上安装EMQX
    EMQX是中国杭州一家科技公司(公司名叫EMQ)发布的面向5G和物联网市场的消息与流处理开源软件。2013年,EMQ作为一个开源项目在Github:​​https://github.com/emqx/emqx​​......
  • 【Mysql】Linux安装Mysql
     目录: 1、检查是否已安装Mysql 2、官网下载MySQL安装包 3、上传mysql安装包并解压--> 移动并修改文件名 4、先检查是否有mysql用户组和mysql用......
  • Mysql数据库--启航
    Hello,我是CoderBug,今天我们来了解一下当前的主流数据库之一--Mysql数据库.1.Mysql数据库起源MySQL是一种开源的关系型数据库管理系统,由瑞典MySQLAB公司开发,目前已被Oracl......
  • Mysql 数据库中存储的年月日时分表与传入参数年月日做相等筛选
    数据库中存储的时间如下  场景:参数传递只到年月日,此时我们又想让sql走上这个c_time的索引,我们这时就没法用date()函数解决方案:sql中参数传递成一个范围,比如我们现在需......
  • dremio 实现官方create user sql 处理的一些说明
    以前我简单说明实际上当时我只是说明了以下简单的思路,最近随着对于dremio慢慢比较深入的学习,发现直接实现createusersq似乎并不是一个比较方便的原因传入的参数是Qu......
  • Django之SQL注入漏洞复现(CVE-2021-35042)
    前言SQL注入的原理是对web请求,表单或域名等提交查询的字符串没有进行安全检测过滤,攻击者可以拼接执行恶意SQL命令,导致用户数据泄露漏洞原理Django组件存在SQL注入漏......
  • Linux分区命令parted的用法
    linux分区命令parted的用法parted的适用场景创建操作大于2T的分区一般情况下,我们都是选择使用fdisk工具来进行分区,但是目前在实际生产环境中使用的磁盘空间越来越大,呈T......
  • Python学习笔记--SQL数据
    SQL本人受到Java的影响,数据库的话,就不按照教程走了,我就直接使用的是Navicat软件的数据库啦!SQL支持注释:两种单行注释(--和#),和一种多行注释(/**/)基础的使用语法:使......
  • gdbserver远程调试
    在嵌入式系统开发中,我们经常通过使用交叉调试工具实现远程调试。采用远程调试的主要原因是大多数嵌入式平台不太适合进行本地调试,在很多嵌入式平台上内存等资源受限制,并且......