SQLServer⾼级进阶之分区表创建
⼀、分区表概念
1.1、什么是分区表?
分区表是在SQL Server 2005之后的版本引⼊的特性,这个特性允许把逻辑上的⼀个表在物理上分为很多部分。换句话说,分区表从物理上看是将⼀个⼤表分成⼏个⼩表,但是从逻辑上看,还是⼀个⼤表。
1.2、分区与分表的区别
分区:就是把⼀张表的数据分成N个区块,从逻辑上看只是⼀张表,但底层是由N个物理区块组成的。
分表:就是把⼀张表按⼀定的规则分解成N个具有独⽴存储空间的实体表。
1.3、⽔平分表与垂直分表的区别
⽔平分表:将⼀张表中的数据分成多个表且表结构不变。
垂直分表:将⼀张表按照字段分成不同表且表结构发⽣改变。
⼆、分区表优点
2.1、使⽤多个⽂件分布数据到多个硬盘中,可以极⼤地提⾼IO性能。
2.2、多个⽂件对于数据略多的数据库来说,备份和恢复都会轻松很多。
电脑报警音三、分区表场景
祝三八妇女节的祝福语3.1、数据库中某个表的数据量很⼤,在查询数据时会明显感觉到速度很慢,这种情况可以考虑分区表。
3.2、数据是分段的,如以年份为分隔的数据,对于当前的数据经常进⾏增删改查操作,⽽对于往年的数据⼏乎不做操作或只做查询操作,这种情况可以考虑分区表。
四川旅游景点排名3.3、对数据的操作如果只涉及⼀部分数据⽽⾮全部数据,这种情况可以考虑分区表。
3.4、如果⼀张表的数据经常进⾏增删改查操作,⽽不管年份之类的因素,这种情况最好不要考虑分区表。
四、分区表创建
4.1、创建步骤
创建分表区的步骤分为5步:双球怎么玩
1)创建数据库⽂件组
2)创建数据库⽂件
注:应将⽂件组和⽂件存放于不同的硬盘甚⾄不同的服务器中,因为数据的读取瓶颈很⼤程度在于硬盘的读写速度,多个硬盘存储⼀个表可以实现负载均衡。
3)创建分区函数
注:声明分区的标准。
4)创建分区⽅案
注:即哪些区域使⽤哪个分区函数,形成完整的分区⽅案。
5)创建分区表
4.2、创建实操
背景:现以表Sales.SalesOrderHeader作为⽰例,此表有2011-2014年的数据。
分区:按年进⾏分区,此表有2011、2012、2013、2014等4个边界值,需要5个分区,分别是2011前、2011、2012、2013、2013后。
招行个人贷款利率描述:分区表的数据存放于分区⽂件(数据库ndf⽂件)中;分区⽂件存放于分区⽂件组中;分区⽂件组存放于多个硬盘中。
梗为什么叫梗1)对着数据库点击"右键"->"属性"。
2)点击"⽂件组"->"添加⽂件组"->分别建⽴FG2011BF、FG2011、FG2012、FG2013、FG2013AF等5个⽂件组->"确定"。
3)点击"⽂件"->"添加"->分别建⽴FL2011BF、FL2011、FL2012、FL2013、FL2013AF等5个⽂件->选择对应的⽂件组及存放路径->"确定"。
4)对着表Sales.SalesOrderHeader点击"右键"->"存储"->"创建分区"->"下⼀步"。
5)分区列选择"OrderDate"->勾选"将存储区中的所有⾮唯⼀索引和唯⼀索引与索引分区列对齐"->点击"下⼀步"。
6)起个分区函数名如"SalesOrderHeader_OrderDate"->点击"下⼀步"。
7)起个分区⽅案名如"SalesOrderHeader_OrderDate"->点击"下⼀步"。
8)映射分区范围选择"左边界"->点击"设置边界"->开始⽇期:"2011/01/01"、结束⽇期:"2014/01/01"、⽇期范围:"年"->点击"确定"。
9)依边界值选择相对应的⽂件组->点击"预计存储空间"可查看⾏计数及空间信息->点击"下⼀步"。
10)选择"⽴即运⾏"->点击"下⼀步"->点击"完成"。
五、分区表检查
5.1、检查分区函数与分区⽅案
5.2、检查分区⽂件
六、分区表查询
6.1、查看分区及⾏计数
SELECT CONVERT(VARCHAR(50),A.NAME) Partition_Scheme,D.Partition_Number,CONVERT(VARCHAR(10),E.NAME) FileGroup,
CONVERT(VARCHAR(19),ISNULL(G.VALUE,''),120) Range_Boundary,STR(D.ROWS,9) Rows
FROM SYS.PARTITION_SCHEMES A INNER JOIN SYS.DESTINATION_DATA_SPACES B ON A.DATA_SPACE_ID=B.PARTITION_SCHEME_ID
INNER JOIN SYS.INDEXES C ON A.DATA_SPACE_ID=C.DATA_SPACE_ID
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
INNER JOIN SYS.DATA_SPACES E ON B.DATA_SPACE_ID=E.DATA_SPACE_ID
INNER JOIN SYS.PARTITION_FUNCTIONS F ON A.FUNCTION_ID=F.FUNCTION_ID
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 WHERE C.OBJECT_ID=OBJECT_ID('SALES.SALESORDERHEADER') --分区表名
AND C.INDEX_ID IN (0,1)
ORDER BY Partition_Scheme,D.Partition_Number
6.2、查看⽂件及⽂件组
SELECT A.[NAME],A.PHYSICAL_NAME,A.[SIZE],A.GROWTH,B.[NAME][FILEGROUP],B.IS_DEFAULT
FROM SYS.DATABASE_FILES A INNER JOIN SYS.FILEGROUPS B ON A.DATA_SPACE_ID=B.DATA_SPACE_ID
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论