mysql之表分区
分区介绍:
一、什么是分区?
所谓分区,就是将一个表分成多个区块进行操作和保存,从而降低每次操作的数据,提高性能。而对于应用来说则是透明的,从逻辑上看只有一张表,但在物理上这个表可能是由多个物理分区组成的,每个分区都是独立的对象,可以进行独立处理。
二、分区作用
1。可以逻辑数据分割,分割数据能够有多个不同的物理文件路径。
2。可以存储更多的数据,突破系统单个文件最大限制。
3。提升性能,提高每个分区的读写速度,提高分区范围查询的速度。
4。可以通过删除相关分区来快速删除数据
5。通过跨多个磁盘来分散数据查询,从而提高磁盘IO的性能。
6。涉及到例如SUM()、COUNT()这样聚合函数的查询,可以很容易的进行并行处理。
7。可以备份和恢复独立的分区,这对大数据量很有好处。
三、分区能支持的引擎
MySQL支持大部分引擎创建分区,入MyISAM、InnoDB等;不支持MERGE和CSV等来创建分区。同一个分区表中的所有分区必须是同一个存储引擎。值得注意的是,在MySQL8版本中,MyISAM表引擎不支持分区。
四、确认MySQL支持分区
从MySQL5。1开始引入分区功能,可以如下方式查看是否支持:
老版本用:SHOWVARIABLESLIKEpartition;
新版本用:showplugins;
五、分区类型
1。RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。
例如,可以将一个表通过年份划分成两个分区,20012010年、20112020。
2。LIST分区:类似于RANGE分区,LIST是列值匹配一个离散值集合中的某个值来进行选择。
比如根据字段把值为1、3、5的放到一起,2、4、6的另外放到一起等等。。。
3。HASH分区:基于用户定义的表达式的返回值来进行选择分区,该表达式使用将要插入到表中的这些行的列值来进行计算,这个函数必须产生非负整数值。
通过HASH运算来进行分区,分布的比较均匀
4。KEY分区:类似于按HASH分区,由MySQL服务器提供其自身的哈希函数。
按照KEY进行分区类似于按照HASH分区
六、使用分区注意事项
1。如果表中存在primarykey或者uniquekey时,分区的列必须是paimarykey或者uniquekey的一个组成部分,也就是说,分区函数的列只能从pk或者uk这些key中取子集
2。如果表中不存在任何的paimarykey或者uniquekey,则可以指定任何一个列作为分区列
3。5。5版本前的RANGE、LIST、HASH分区要求分区键必须是int;MySQL5。5及以上,支持非整形的RANGE和LIST分区,即:rangecolumns和listcolumns(可以用字符串来进行分区)。
七、分区命名
1。分区的名字基本上遵循其他MySQL标识符应当遵循的原则,例如用于表和数据库名字的标识符。应当注意的是,分区的名字是不区分大小写的。
2。无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从0开始记录。
八、创建分区
1。RANGE分区:CREATETABLEtest01(dayidint(11)DEFAULTNULL,macvarchar(32)NOTNULLDEFAULT,dtypevarchar(50)NOTNULLDEFAULT)ENGINEInnoDBDEFAULTCHARSETutf8!50100PARTITIONBYLIST(dayid)(PARTITIONp20171205VALUESIN(20171205)ENGINEInnoDB,PARTITIONp20171204VALUESIN(20171204)ENGINEInnoDB,PARTITIONp20171206VALUESIN(20171206)ENGINEInnoDB,PARTITIONp20171207VALUESIN(20171207)ENGINEInnoDB)
解读:以上为uuid小于5时放到p0分区下,uuid大于5且小于10放到p1分区下,uuid大于10且小于15放到p2分区下,uuid大于15一直到最大值的存在p3分区下
2。LIST分区:CREATETABLEtbltest(uuidINTNOTNULL,titleVARCHAR(20)))PARTITIONBYList(uuid)(PARTITIONp0VALUESin(1,2,3,5),PARTITIONp1VALUESin(7,9,10),PARTITIONp2VALUESin(11,15)));
解读:以上为uuid等于1235时放到p0分区,7910放到p1分区,1115放到p2分区。当时用insertinto时如果uuid的值不存在p0p1p2分区时,则会插入失败而报错。
3。HASH分区:
HASH分区主要用来确保数据在预先确定数目的分区中平均分布。在RANGE分区和LIST分区中必须明确指定一个指定的列值或列值集合以指定应该保存在哪个分区中。而在HASH分区中,MySQL会自动完成这些工作,要做的只是基于将要被哈希的列值指定一个表达式,以及指定被分区的表将要被分割成的分区数量,如:CREATETABLEtbltest(uuidINTNOTNULL,titleVARCHAR(20)))PARTITIONBYHASH(uuid)(PARTITIONS3));
解读:MySQL自动创建3个分区,在执行insertinto时,根据插入的uuid通过算法来自动分配区间。
注意:
(1)由于每次插入、更新、删除一行,这个表达式都要计算一次,这意味着非常复杂的表达式可能会引起性能问题,尤其是在执行同时影响大量行的运算(例如批量插入)的时候。
(2)最有效率的哈希函数是只对单个表列进行计算,并且它的值随列值进行一致的增大或减小,因为这考虑了在分区范围上的修剪。也就是说,表达式值和它所基于的列的值变化越接近,就越能有效地使用该表达式来进行HASH分区。
3。1:线性HASH分区
线性HASH分区在PARTITIONBY子句中添加LINEAR关键字。
线性HASH分区的有点在于增加、删除、合并和拆分分区将变得更加快捷,有利于处理含有及其大量数据的表。它的缺点在于各个分区间数据的分布不大可能均衡。
4。KEY分区
类似于HASH分区,HASH分区允许用户自定义的表达式,而KEY分区则不允许使用用户自定义的表达式;HASH分区只支持整数分区,KEY分区支持除了blob和text类型之外的其他数据类型分区。
与HASH分区不同,创建KEY分区表的时候,可以不指定分区键,默认会选择使用主键或唯一键作为分区键,没有主键或唯一键,就必须指定分区键。CREATETABLEtbltest(uuidINTNOTNULL,titleVARCHAR(20)))PARTITIONBYLINEARKey(uuid)PPARTITIONS3;
解读:根据分区键来进行分区
5。子分区
子分区是分区表中,每个分区的再次分割,适合保存非常大量的数据。CREATETABLEtbltest(registerTimeDate))PARTITIONBYGANGE(YEAR(registerTime))SUBPARTITIONBYHASH(TODAYS(registerTime))SUBPARTITIONS2(PARTITIONp0VALUESLESSTHAN(2017),PARTITIONp1VALUESLESSTHAN(2020),PARTITIONp2VALUESLESSTHANMAXVALUE);
解读:主分区使用RANGE按照年来进行分区,有3个RANGE分区。这3个分区中又被进一步分成了2个子分区,实际上,整个表被分成了326个分区。每个子分区按照天进行HASH分区。小于2017的放在一起,20172020的放在一起,大于2020的放在一起。
注意:
(1)在MySQL5。1中,对于已经通过RANGE或LIST分区了的表在进行子分区是可能的。子分区既可以使用HASH分区,也可以使用KEY分区。这也被称为复合分区。
(2)每个分区必须有相同数量的子分区。
(3)如果在一个分区表上的任何分区上使用SUBPARTITION来明确定义任何子分区,那么就必须定义所有的子分区。
(4)每个SUBPARTITION子句必须包含(至少)子分区的一个名字。
(5)在每个子分区内,子分区的名字必须是惟一的,目前在整个表中,也要保持唯一。例如:PARTITIONBYRANGE(YEAR(registerTime))SUBPARTITIONBYHASH(TODAYS(registerTime))(PARTITIONp0VALUESLESSTHAN(2017)(SUBPARTITIONs0,SUBPARTITIONs1),PARTITIONp1VALUESLESSTHAN(2020)(SUBPARTITIONs2,SUBPARTITIONs3),PARTITIONp2VALUESLESSTHANMAXVALUE(SUBPARTITIONs4,SUBPARTITIONs5))
子分区可以用于特别大的表,可以在多个磁盘间分配数据和索引。例如:SUBPARTITIONs0DATADIRECTORYdisk0dataINDEXDIRECTORYdisk0idxSUBPARTITIONs1DATADIRECTORYdisk1dataINDEXDIRECTORYdisk1idx
九、MySQL分区处理NULL值的方式
MySQL中的分区禁止空值NULL上没有进行处理,无论它是一个列值还是一个用户定义表达式的值,一般而言,在这种情况下MySQL把NULL视为0。如果你希望回避这种做法,你应该在设计表时声明列NOTNULL。
十、分区管理概述
可以对分区进行添加、删除、重新定义、合并或拆分等管理操作。
RANGE和LIST分区的管理
1。删除分区语句如:altertabletbltestdroppartitionp0;
注意:
(1)当删除了一个分区,也同时删除了该分区中所有的数据。
(2)可以通过showcreatetabletbltest;来查看新的创建表的语句。
(3)如果是LIST分区的话,删除的数据不能新增进来,因为这些行的列值包含在已经删除了的分区的值列表中。
2。添加分区语句如:altertabletbltestaddpartition(partitionp3valueslessthan(50));
注意:
(1)对于RANGE分区的表,只可以添加新的分区到分区列表的最高端。
(2)对于LIST分区的表,不能添加已经包含在现有分区值列表中的任意值。
3。如果希望能不丢失数据的条件下重新定义分区,可以使用如下语句:
REORGANIZE会对分区的数据进行重构。
ALTERTABLEtblnameREORGANIZEPARTITIONpartitionlistINTO(partitiondefinitions)
(1)拆分分区如:
ALTERTABLEtblnameREORGANIZEPARTITIONpartitionlistINTO(partitions0valueslessthan(5),partitions1valueslessthan(10));
或者如:
ALTERTABLEtblnameREORGANIZEPARTITIONp0INTO(partitions0valuesin(1,2,3),partitions1valuesin(4,5));
(2)合并分区如:ALTERTABLEtblnameREORGANIZEPARTITIONs0,s1INTO(partitionp0valuesin(1,2,3,4,5));
4。删除所有分区,但保留数据,形式:ALTERTABLEtblnameremovepartitioning;
HASH和KEY分区的管理
1。减少分区数量语句如:ALTERTABLEtblnameCOALESCEPARTITION2;
2。添加分区数量语句如:ALTERTABLEtblnameaddPARTITIONpartitions2;
其他分区管理语句
1。重建分区:类似于先删除保存在分区中的所有记录,然后重新插入它们,可用于整理分区碎片。如:ALTERtabletblnameREBUILDPARTITIONp2,p3;
2。优化分区:如果从分区中删除了大量的行,或者对一个带有可变长度的行(也就是说,有VARCHAR,BLOB或TEXT类型的列)做了许多修改,可以使用ALTERTABLEtblnameOPTIMIZEPARTITION来收回没有使用的空间,并整理分区数据文件的碎片。如:ALTERTABLEtblnameOPTIMIZEPARTITIONp2,p3;
3。分析分区:读取并保存分区的键分布,如:ALTERTABLEtblnameANALYZEPARTITIONp2,p3;
4。检查分区:检查分区中的数据或索引是否已经被破坏,如:ALTERTABLEtblnameCHECKPARTITIONp2,p3;
5。修补分区:修补被破坏的分区,如:ALTERTABLEtblnameREPAIRPARTITIONp2,p3;
十、查看分区信息
1。查看分区信息:selectfrominformationschema。partitionswheretableschemaarch1andtablenametbltestG;
2。查看分区上的数据:selectfromtbltestpartition(p0);
3。查看MySQL会操作的分区:explainpartitionsselectfromtbltestwhereuuid2;
十一、局限性
1。最大分区数目不能超过1024,一般建议对单表的分区数不要超过50个。
2。如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内。
3。不支持外键。
4。不支持全文索引,对分区表的分区键创建索引,那么这个索引也将被分区。
5。按日期进行分区很合适,因为很多日期函数可以用。但是对字符串来说合适的分区函数不太多。
6。只有RANGE和LIST分区能进行子分区,HASH和KEY分区不能进行子分区。
7。临时表不能被分区。
8。分区表对于单条记录的查询没有优势。
9。要注意选择分区的成本,没插入一行数据都需要按照表达式筛选插入的分区。
10。分区字段尽量不要可以为null
祝老师教师节快乐小学作文第1篇老师节日快乐又是一个金秋季节,又是一个收获的日子,当一批批大哥哥大姐姐踏进更高学府,我们又进入新的年级的时候,一个光荣而神圣的节日教师节到来了。我没有鲜花,也没有美……
超28亿主力流入汽车产业链居首,智能电动车ETF(516385月23日午后,汽车整车及零部件板块,悉数强劲拉升,截至14:00,超28亿元主力资金净流入汽车板块,高居31个申万一级行业第一。其中,中通客车、安凯客车、江淮汽车等涨停。天齐……
工信部14月软件业务收入27735亿元,同比增长10。8工信微报消息,工信部发布2022年14月份软件业经济运行情况。14月份,我国软件和信息技术服务业(下称软件业)运行态势平稳,软件业务收入保持两位数增长,利润降幅持续收窄,……
睡莲是夜,柔柔的月光照射在沉睡的大地上,在一切生命都沉浸在甜美的梦乡中时,她mdash;mdash;睡莲独自展现着属于她的与世无争之美hellip;hellip;池塘中央,正……
Windows加密指南,这4种解锁方式让你的电脑更安全从上学到上班,从游戏到工作,电脑伴随我们成长,也珍藏着我们学习工作的众多重要资料。正因为这些资料的重要性,电脑加密就非常重要了。虽然Windows10可以使用微软账号登陆,但十……
目前电脑CPU哪款性价比高?题主问目前电脑CPU哪款性价比高?其实关于这个问题范围有点大了,这个性价比是在指定用途,指定预算的情况下选出来的,有低端,中端,高端,在这个几个范围内又有不同品牌不同型号……
PK赛关于前行的作文向着心的方向前行E度网专稿未经允许不得转载登山估计世人皆知,用脚用手向着高高在上的峰巅前行,心里默念着名言:ldquo;世上没有比人更高的山,没有比脚更长的路。rdquo;可我的一……
2019教育部通知35所大学增设这个专业,年薪50万,社会需根据教育部最新通知,国内的35所大学将增设人工智能专业,人工智能专业将会成为工科的一份子。北京科技大学、北京交通大学、天津大学、东北大学、大连理工大学等著名理工学校都在内。……
春节感悟作文400字4篇春节感悟作文400字1寒假里,因为外婆在外帮舅舅打理生意,我也没了机会下乡。春节前几天,爸妈还都在忙着上班,我心里空落落的,成天掰着指头数日子,春节怎么还不快点到呀!……
欣赏自己的作文导语:欣赏自己,那就不要说ldquo;不行rdquo;,让自己接受挑战,让自己的羽翼更丰满、更硬朗。下面是小编整理的一些关于自己的作文,欢迎查阅,谢谢!欣赏自己作文(一)……
我爱这盆菊花作文现在是秋季,正是菊花盛开的季节。菊花千姿百态,有的秀丽淡雅,有的亭亭玉立,还有的富贵大方。我眼前这盆菊花也令我心动。远远望去它就像一团火焰在燃烧。走近一看它的花芯是金灿灿……
中国电信数字智能科技分公司正式成立构建更繁荣的大数据和AI产5月19日,中国电信数字智能科技分公司成立(以下简称智能科技分公司)。中国电信此次成立智能科技分公司,是争做核心技术自主掌控的科技型企业的重要举措之一,将加快推动公司大数据和A……
假如我是一朵小小云七年级作文刚入学的时候,我就假想:假如我是一朵小小云,现在我长大了,我心中更是想让幻想变为事实。假如我是一朵小小云,我第一个念头就会想到飞到那炎热的大沙漠去,在沙漠领空。喷散我的甘……
经典作文永恒的亲情世界上有万般情愫,他们各以自己独特的方式温暖着我们,美丽着这个世界,让我们的生活温情总在。可在这万般情愫中,唯一永恒的不变的是亲情。从我呱呱落地那天起,亲情就陪伴我左右,……
三年级国庆节日记300字国庆节让大家都放了一个小长假!但是千万不要忘了写日记哦!今天小编为大家整理三年级国庆节日记300字,欢迎阅读!范文一:三年级国庆节日记300字今天是国庆节妈妈决定带……
夏天的雨四年级作文4篇篇一:夏天的雨作文400字淅沥沥,淅沥沥天空弹奏着一首美妙的旋律,多么清脆,多么悦耳。夏天的雨,细如线,粗如麻。当下着细细的雨丝时,大家出去走时都差不多不带伞,凉凉……
券商回应APP违法违规被通报检测提取的APP版本非官方正式发南方财经4月25日电,国家计算机病毒应急处理中心近期通过互联网监测发现17款移动App存在隐私不合规行为,涉及13家券商APP和4家第三方炒股软件,违反网络安全法、个人信息保护……
我真佩服你我的邻居李爷爷是一名医生,他以身作则,严格要求自己的精神令人敬佩。曾经听李爷爷的孙子李明说,李爷爷工作的医院,风景可美了。郁郁葱葱的树木,四季不谢的花朵,还有一个小……
激动人心的一瞬间作文这次升旗仪式,是我有生以来最激动的时刻了。下面是小编整理的一些关于激动的优秀激动人心的一瞬间作文,欢迎查阅!激动人心的一瞬间作文一上学期中,叮铃铃,随着清脆的上课铃声,各……
种菜风波作文800字妈妈开垦了一块地。她兴奋地播下了种子,并弯腰埋上了土,然后起身,擦了擦额上的汗,眼底闪着兴奋的光芒。我碰巧看到她,问,你弄这个干什么。妈妈的眼睛都快眯成一条缝……
高二观后感非凡的领航观后感三绘好新时代党的组织路线图党的组织路线是我们党发展壮大的重要法宝,也是党和国家事业胜利前进的坚强保证。近日,陈希部长在2020年秋季学期第二批进修班开学典礼上再次强调,要深……
有哪些去视频黑边的免费app?感谢邀请回答!1去除视频黑边的软件,推荐MP4RM转换专家软件可以将视频中的黑边去除掉,处理速度是较快的,导入rmvb视频,选择导出avi格式,在人性化影片画面裁剪……
谁最幸运郊外有个很大的玫瑰花园。花园里有许多玫瑰:有的含苞欲放,有的花蕾初绽,有的已经盛开得令人心醉hellip;hellip;阳光温暖着它们,露水滋润着它们,篱笆保护着它们。它……
2017人生需要目标作文精选人生需要目标,理想要切合实际,目标不要过高过远,只有这样,我们才能够在ldquo;短暂rdquo;的生命历程中书写出属于自己的辉煌的篇章,小编收集了人生需要目标作文,欢迎阅读。……