mysql表分区使用及详细介绍
7月7日 封了心投稿 一、分区概念
分区是将一个表分成多个区块进行操作和保存,从而降低每次操作的数据,提高性能。而对于应用来说则是透明的,从逻辑上看只有一张表,但在物理上这个表可能是由多个物理分区组成的,每个分区都是独立的对象,可以进行独立处理。
二、分区作用
1。可以逻辑数据分割,分割数据能够有多个不同的物理文件路径。
2。可以存储更多的数据,突破系统单个文件最大限制。
3。提升性能,提高每个分区的读写速度,提高分区范围查询的速度。
4。可以通过删除相关分区来快速删除数据
5。通过跨多个磁盘来分散数据查询,从而提高磁盘IO的性能。
6。涉及到例如SUM()、COUNT()这样聚合函数的查询,可以很容易的进行并行处理。
7。可以备份和恢复独立的分区,这对大数据量很有好处。
三、分区能支持的引擎
MySQL支持大部分引擎创建分区,入MyISAM、InnoDB等;不支持MERGE和CSV等来创建分区。同一个分区表中的所有分区必须是同一个存储引擎。值得注意的是,在MySQL8版本中,MyISAM表引擎不支持分区。
四、确认MySQL支持分区
从MySQL5。1开始引入分区功能,可以如下方式查看是否支持:
老版本用:SHOWVARIABLESLIKE
新版本用:
五、分区类型
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分区要求分区键必须是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)
PARTITIONS3;
解读:根据分区键来进行分区
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
)
)
子分区可以用于特别大的表,可以在多个磁盘间分配数据和索引。例如:
SUBPARTITIONs0
DATADIRECTORYdisk0data
INDEXDIRECTORYdisk0idx
,
,
SUBPARTITIONs1
DATADIRECTORYdisk1data
INDEXDIRECTORYdisk1idx
九、MySQL分区处理NULL值的方式
MySQL中的分区禁止空值NULL上没有进行处理,无论它是一个列值还是一个用户定义表达式的值,一般而言,在这种情况下MySQL把NULL视为0。如果你希望回避这种做法,你应该在设计表时声明列NOTNULL。
十、分区管理概述
可以对分区进行添加、删除、重新定义、合并或拆分等管理操作。
RANGE和LIST分区的管理
1。删除分区语句如:altertabletbltestdroppartitionp0;
注意:
(1)当删除了一个分区,也同时删除了该分区中所有的数据。
(2)可以通过来查看新的创建表的语句。
(3)如果是LIST分区的话,删除的数据不能新增进来,因为这些行的列值包含在已经删除了的分区的值列表中。
2。添加分区语句如:altertabletbltestaddpartition(partitionp3valueslessthan(50));
注意:
(1)对于RANGE分区的表,只可以添加新的分区到分区列表的最高端。
(2)对于LIST分区的表,不能添加已经包含在现有分区值列表中的任意值。
3。如果希望能不丢失数据的条件下重新定义分区,可以使用如下语句:
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。删除所有分区,但保留数据,形式:ALTERTABLE
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
我在上海组捕鼠队,抓老鼠年入40万,豪华别墅扫出5斤老鼠屎凌晨两点,胡师傅的电话突然响了。按下接听键,对面传来一个带哭腔的女声你们快来一趟!不然我今晚真没办法睡了胡师傅叫醒熟睡的老张,两人赶紧备好铁丝网、长柄钳、强化纸板、钢丝球……
特斯拉欧洲超级工厂建设进度延误马斯克坐不住了【环球网科技综合报道】据外媒消息,特斯拉目前正在勃兰登堡州建设欧洲超级工厂,耗资58亿欧元(约合448亿元),但进展不顺。当地时间8月11日,特斯拉首席执行官埃隆马斯克突……
mysql表分区使用及详细介绍一、分区概念分区是将一个表分成多个区块进行操作和保存,从而降低每次操作的数据,提高性能。而对于应用来说则是透明的,从逻辑上看只有一张表,但在物理上这个表可能是由多个物理分……
长白时评新电商大会带你领略数字魅力10月9日,由国家互联网信息办公室、吉林省人民政府指导,中国网络社会组织联合会、吉林省互联网信息办公室、吉林省商务厅、长春市人民政府共同主办的首届中国新电商大会将在吉林省长春市……
中国新能源汽车未来发展三大方向总结新能源汽车是指采用非常规的车用燃料作为动力来源(或使用常规的车用燃料、采用新型车载动力装置),综合车辆的动力控制和驱动方面的先进技术,形成的技术原理先进、具有新技术、新结构的汽……
住宅设计160的四间瓦房改造成了网红民宿,通顶落地窗美极了今天给大家带来的是一个老房改造的项目,四间瓦房改造成了民宿,项目地点位于北京怀柔九渡河镇石湖峪村,该村落位于著名的水长城脚下,周边绿树环绕,青山绿水,真的是舒适的休闲胜地。……
高速公路免费期间,交警提醒有ETC的车千万不能这么开ETC是电子不停车收费系统的英文简称,经过几年的任务推广和收费站人工车道的减少,ETC的安装普及率已经非常高了。对于经常跑高速的车主来说,安装ETC的确提高了通行效率,比起人工……
游戏党福利来了!120Hz魅族17玩跑跑卡丁车,丝滑般流畅现在随着手游的高速发展,不少游戏都发布了手游版本,其中90后游戏回忆录中一款赛车类游戏,跑跑卡丁车确实给了不少90后玩家一些难忘的考驾照回忆。而现在跑跑卡丁车也走上了手游化的道……
华为路由Q2Pro详细评测哪里信号不好插哪里对于怎么挑选路由器,挑选什么样的路由器,普通用户一直还比较迷茫。甚至一度认为只要路由器头上的天线多,路由器的信号就一定好,像有这样观点的普通用户也不在少数。但是家庭WiFi信号……
戴助听器对耳朵有没有副作用?一般来说戴助听器对于耳朵是没有太大的副作用的,好处大于坏处,明白了其中的道理基本上就有可能消除副作用的。任何事物都是有两面性的,助听器当然也不例外。问这个问题的人,大部分……
万和和美的燃气热水器哪个更好?在燃气热水器这个单品上,万和、美的都是一线品牌,产品的质量真的相差无几。万和本来就是以燃气热水器起家的,从万家乐的零件供应商一步一步做到了现在燃气热水器单品行业老大的位置;美的……
没油了!!末日来了吗?米色禾苗禾苗的北美生活下午在摇椅上被晃的昏昏欲睡,突然电话铃响了你车有油吗?电话那端传来朋友焦虑的声音。什么意思?我不会是在做梦吧。全城都没汽油了……
七年级语文教学反思身为一位到岗不久的教师,我们要在课堂教学中快速成长,写教学反思能总结教学过程中的很多讲课技巧,那么你有了解过教学反思吗?下面是小编为大家整理的七年级语文教学反思,欢迎阅读,希望……
文成公主进藏的教学设计教学目的:1。认识7个生字。读读记记唐朝、西藏、大臣、求婚、断定、豌豆、耕种、技艺、沼泽地等词语。2。有感情地朗读课文。了解文成公主的功绩,受到民族团结的教育,体会……
半截蜡烛第二课时公开课教学设计一、谈话导入1。昨天我们读了课文,知道《半截蜡烛》是发生在二次大战期间,当时的法西斯用非常残暴屠杀2。看录像(这里的多媒体课件玫们〉胶么?浅行谌莸难窈蜕杓埔彩……
到头的拼音解释与造句到头拼音【注音】:daotou到头解释【意思】:(儿)到了尽头。到头造句1、这条路突然到头了。2、这条街走到头有一个商店。3、他一年到……
音乐教学的实践与反思新课程的实施给中小学音乐课堂教学带来了百花齐放的春天,人们在一片教育教学改革的呼声中,开始关注和探索新的教学方法。广大中小学音乐教师在体现新的教学理念中大胆设计教学方案,实施教……
2018年一年级口耳目教学反思孩子们是一年级的新生,他们刚踏入校园,才适应了拼音教学,又要面对新的挑战学习识字。识字课的教学重点,难点,教学步骤、老师的教学环节都和拼音教学有差距,孩子们能和自己配合好,给自……
猎手阅读附答案猎手贾平凹从太白山的白麓往上,越往上树木越密越高,上到山的中腰再往上,树木则越稀越矮,待到大稀大矮的境界,繁衍着狼的族类,也住了一户猎狼的人家。这猎手粗脚大手,熟知……
整理和复习课程教学设计教学内容:万以内的加法和减法(一)的整理和复习(教材第102页内容,练习二十一第13题)教学目标:1、通过对本单元学习内容的整理和复习以及练习,使学生能较好地……
神奇的卡通实践活动教案一、活动名称:神奇的卡通二、活动具体目标:1、知识目标通过活动,使学生初步了解卡通画的特点,帮助学生提高观察生活的能力和改变思考问题的方式,并掌握卡通绘画的一……
新目标八年级英语下册Unitampnbsp10教学设计新目标英语八年级下册unit10it’saniceday,isn’tit?教学设计一、教学内容及分析本单元教学内容为人教版八年级下unit10it’saniceday,isn’……
曲解,让课堂更精彩教案曲解,让课堂更精彩一次作文指导课上。师:生活中,有些什么事让你们觉得后悔呢?大家可以交流交流。生:一个大热天,我捡到一张残缺不全的一元钱,于是把它折了又折,最……
让我们在爱中成长的主题班会教案活动形式:谈话,读信,唱歌,诗朗诵,打亲情热线,生日祝贺等。活动目的:1、通过讲述、谈话、读信等方式,让留守儿童单亲孩子吐露自己的心声,号召所有的学生关心帮助……