范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

mysql表分区使用及详细介绍

  一、分区概念
  分区是将一个表分成多个区块进行操作和保存,从而降低每次操作的数据,提高性能。而对于应用来说则是透明的,从逻辑上看只有一张表,但在物理上这个表可能是由多个物理分区组成的,每个分区都是独立的对象,可以进行独立处理。
  二、分区作用
  1.可以逻辑数据分割,分割数据能够有多个不同的物理文件路径。
  2.可以存储更多的数据,突破系统单个文件最大限制。
  3.提升性能,提高每个分区的读写速度,提高分区范围查询的速度。
  4.可以通过删除相关分区来快速删除数据
  5.通过跨多个磁盘来分散数据查询,从而提高磁盘I/O的性能。
  6.涉及到例如SUM()、COUNT()这样聚合函数的查询,可以很容易的进行并行处理。
  7.可以备份和恢复独立的分区,这对大数据量很有好处。
  三、分区能支持的引擎
  MySQL支持大部分引擎创建分区,入MyISAM、InnoDB等;不支持MERGE和CSV等来创建分区。同一个分区表中的所有分区必须是同一个存储引擎。值得注意的是,在MySQL8版本中,MyISAM表引擎不支持分区。
  四、确认MySQL支持分区
  从MySQL5.1开始引入分区功能,可以如下方式查看是否支持:
  老版本用:SHOW VARIABLES LIKE "%partition%";
  新版本用:show plugins;
  五、分区类型
  1. RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。
  例如,可以将一个表通过年份划分成两个分区,2001 -2010年、2011-2020。
  2. LIST分区:类似于RANGE分区,LIST是列值匹配一个离散值集合中的某个值来进行选择。
  比如 根据字段 把值为1、3、5的放到一起,2、4、6的另外放到一起 等等...
  3. HASH分区:基于用户定义的表达式的返回值来进行选择分区,该表达式使用将要插入到表中的这些行的列值来进行计算,这个函数必须产生非负整数值。
  通过HASH运算来进行分区,分布的比较均匀
  4. KEY分区:类似于按HASH分区,由MySQL服务器提供其自身的哈希函数。
  按照KEY进行分区类似于按照HASH分区
  六、分区创建注意事项
  1. 如果表中存在primary key 或者 unique key 时,分区的列必须是paimary key或者unique key的一个组成部分,也就是说,分区函数的列只能从pk或者uk这些key中取子集
  2. 如果表中不存在任何的paimary key或者unique key,则可以指定任何一个列作为分区列
  3. 5.5版本前的RANGE、LIST、HASH分区要求分区键必须是int;MySQL5.5及以上,支持非整形的RANGE和LIST分区,即:range columns 和 list columns (可以用字符串来进行分区)。
  七、分区命名
  1. 分区的名字基本上遵循其他MySQL 标识符应当遵循的原则,例如用于表和数据库名字的标识符。应当注意的是,分区的名字是不区分大小写的 。
  2. 无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从0开始记录。
  八、 创建分区
  1. RANGE分区:
  CREATE TABLE `test01` (
  `dayid` int(11) DEFAULT NULL,
  `mac` varchar(32) NOT NULL DEFAULT "",
  `dtype` varchar(50) NOT NULL DEFAULT ""
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  /*!50100 PARTITION BY LIST (dayid)
  (PARTITION p20171205 VALUES IN (20171205) ENGINE = InnoDB,
  PARTITION p20171204 VALUES IN (20171204) ENGINE = InnoDB,
  PARTITION p20171206 VALUES IN (20171206) ENGINE = InnoDB,
  PARTITION p20171207 VALUES IN (20171207) ENGINE = InnoDB) */
  解读:以上为 uuid小于5时放到p0分区下,uuid大于5且小于10放到p1分区下,uuid大于10且小于15放到p2分区下,uuid大于15 一直到最大值的存在p3分区下
  2. LIST分区:
  CREATE TABLE tbl_test (
  uuid INT NOT NULL,
  title VARCHAR(20)
  )
  )
  PARTITION BY List (uuid) (
  PARTITION p0 VALUES in (1,2,3,5),
  PARTITION p1 VALUES in (7,9,10),
  PARTITION p2 VALUES in (11,15)
  )
  );
  解读:以上为uuid 等于1/2/3/5时放到p0分区,7/9/10放到p1分区,11/15放到p2分区。当时用insert into时 如果uuid的值不存在p0/p1/p2分区时,则会插入失败而报错。
  3. HASH分区:
  HASH分区主要用来确保数据在预先确定数目的分区中平均分布。在RANGE分区和LIST分区中必须明确指定一个指定的列值或列值集合以指定应该保存在哪个分区中。而在HASH分区中,MySQL会自动完成这些工作,要做的只是基于将要被哈希的列值指定一个表达式,以及指定被分区的表将要被分割成的分区数量,如:
  CREATE TABLE tbl_test (
  uuid INT NOT NULL,
  title VARCHAR(20)
  ))
  PARTITION BY HASH (uuid) (
  PARTITIONS 3
  ));
  解读:MySQL自动创建3个分区,在执行insert into时,根据插入的uuid通过算法来自动分配区间。
  注意:
  (1) 由于每次插入、更新、删除一行,这个表达式都要计算一次,这意味着非常复杂的表达式可能会引起性能问题,尤其是在执行同时影响大量行的运算(例如批量插入)的时候。
  (2) 最有效率的哈希函数是只对单个表列进行计算,并且它的值随列值进行一致的增大或减小,因为这考虑了在分区范围上的"修剪"。也就是说,表达式值和它所基于的列的值变化越接近,就越能有效地使用该表达式来进行HASH分区。
  3.1:线性HASH分区
  线性HASH分区在"PARTITION BY"子句中添加"LINEAR"关键字。
  线性HASH分区的有点在于增加、删除、合并和拆分分区将变得更加快捷,有利于处理含有及其大量数据的表。它的缺点在于各个分区间数据的分布不大可能均衡。
  4. KEY分区
  类似于HASH分区,HASH分区允许用户自定义的表达式,而KEY分区则不允许使用用户自定义的表达式;HASH分区只支持整数分区,KEY分区支持除了blob和text类型之外的其他数据类型分区。
  与HASH分区不同,创建KEY分区表的时候,可以不指定分区键,默认会选择使用主键或唯一键作为分区键,没有主键或唯一键,就必须指定分区键。
  CREATE TABLE tbl_test (
  uuid INT NOT NULL,
  title VARCHAR(20)
  ))
  PARTITION BY LINEAR Key (uuid)
  PARTITIONS 3;
  解读:根据分区键来进行分区
  5. 子分区
  子分区是分区表中,每个分区的再次分割,适合保存非常大量的数据。
  CREATE TABLE tbl_test (
  registerTime Date
  ))
  PARTITION BY GANGE(YEAR(registerTime))
  SUBPARTITION BY HASH (TO_DAYS(registerTime))
  SUBPARTITIONS 2
  (
  PARTITION p0 VALUES LESS THAN (2017),
  PARTITION p1 VALUES LESS THAN (2020),
  PARTITION p2 VALUES LESS THAN MAXVALUE
  );
  解读:主分区使用RANGE按照年来进行分区,有3个RANGE分区。这3个分区中又被进一步分成了2个子分区,实际上,整个表被分成了3 * 2 = 6个分区。每个子分区按照天进行HASH分区。小于2017的放在一起,2017-2020的放在一起,大于2020的放在一起。
  注意:
  (1) 在MySQL5.1中,对于已经通过RANGE或LIST分区了的表在进行子分区是可能的。子分区既可以使用HASH分区,也可以使用KEY分区。这也被称为复合分区。
  (2) 每个分区必须有相同数量的子分区。
  (3) 如果在一个分区表上的任何分区上使用SUBPARTITION来明确定义任何子分区,那么就必须定义所有的子分区。
  (4) 每个SUBPARTITION子句必须包含(至少)子分区的一个名字。
  (5) 在每个子分区内,子分区的名字必须是惟一的,目前在整个表中,也要保持唯一。例如:
  PARTITION BY RANGE(YEAR(registerTime))
  SUBPARTITION BY HASH(TO_DAYS(registerTime))
  (
  PARTITION p0 VALUES LESS THAN (2017) (
  SUBPARTITION s0,
  SUBPARTITION s1
  ),
  PARTITION p1 VALUES LESS THAN (2020) (
  SUBPARTITION s2,
  SUBPARTITION s3
  ),
  PARTITION p2 VALUES LESS THAN MAXVALUE (
  SUBPARTITION s4,
  SUBPARTITION s5
  )
  )
  子分区可以用于特别大的表,可以在多个磁盘间分配数据和索引。例如:
  SUBPARTITION s0
  DATA DIRECTORY = "/disk0/data"
  INDEX DIRECTORY = "/disk0/idx"
  ,
  ,
  SUBPARTITION s1
  DATA DIRECTORY = "/disk1/data"
  INDEX DIRECTORY = "/disk1/idx"
  九、MySQL分区处理NULL值的方式
  MySQL中的分区禁止空值NULL上没有进行处理,无论它是一个列值还是一个用户定义表达式的值,一般而言,在这种情况下MySQL把NULL视为0。如果你希望回避这种做法,你应该在设计表时声明列"NOT NULL"。
  十、分区管理概述
  可以对分区进行添加、删除、重新定义、合并或拆分等管理操作。
  ① RANGE和LIST分区的管理
  1. 删除分区语句如:alter table tbl_test drop partition p0;
  注意:
  (1) 当删除了一个分区,也同时删除了该分区中所有的数据。
  (2) 可以通过show create table tbl_test;来查看新的创建表的语句。
  (3) 如果是LIST分区的话,删除的数据不能新增进来,因为这些行的列值包含在已经删除了的分区的值列表中。
  2. 添加分区语句如:alter table tbl_test add partition(partition p3 values less than(50));
  注意:
  (1) 对于RANGE分区的表,只可以添加新的分区到分区列表的最高端。
  (2) 对于LIST分区的表,不能添加已经包含在现有分区值列表中的任意值。
  3. 如果希望能不丢失数据的条件下重新定义分区,可以使用如下语句:
  ALTER TABLE tbl_name REORGANIZE PARTITION partition_list INTO(partition_definitions)
  (1) 拆分分区如:
  ALTER TABLE tbl_name REORGANIZE PARTITION partition_list INTO(partition s0 values less than(5),partition s1 values less than(10));
  或者如:
  ALTER TABLE tbl_name REORGANIZE PARTITION p0 INTO(partition s0 values in(1,2,3), partition s1 values in(4,5));
  (2) 合并分区如:ALTER TABLE tbl_name REORGANIZE PARTITION s0,s1 INTO(partition p0 values in(1,2,3,4,5));
  4. 删除所有分区,但保留数据,形式:ALTER TABLE tbl_name remove partitioning;
  ② HASH和KEY分区的管理
  1. 减少分区数量语句如:ALTER TABLE tbl_name COALESCE PARTITION 2;
  2. 添加分区数量语句如:ALTER TABLE tbl_name add PARTITION partitions 2;
  ③ 其他分区管理语句
  1. 重建分区:类似于先删除保存在分区中的所有记录,然后重新插入它们,可用于整理分区碎片。如:ALTER table tbl_name REBUILD PARTITION p2,p3;
  2. 优化分区:如果从分区中删除了大量的行,或者对一个带有可变长度的行(也就是说,有VARCHAR,BLOB或TEXT类型的列)做了许多修改,可以使用 ALTER TABLE tbl_name OPTIMIZE PARTITION来收回没有使用的空间,并整理分区数据文件的碎片。如:ALTER TABLE tbl_name OPTIMIZE PARTITION p2,p3;
  3. 分析分区:读取并保存分区的键分布,如:ALTER TABLE tbl_name ANALYZE PARTITION p2,p3;
  4. 检查分区:检查分区中的数据或索引是否已经被破坏,如:ALTER TABLE tbl_name CHECK PARTITION p2,p3;
  5. 修补分区:修补被破坏的分区,如:ALTER TABLE tbl_name REPAIR PARTITION p2,p3;
  十、查看分区信息
  1. 查看分区信息:select * from information_schema.partitions where table_schema="arch1" and table_name = "tbl_test" G;
  2. 查看分区上的数据:select * from tbl_test partition(p0);
  3. 查看MySQL会操作的分区:explain partitions select * from tbl_test where uuid = 2;
  十一、 局限性
  1. 最大分区数目不能超过1024,一般建议对单表的分区数不要超过50个。
  2. 如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内。
  3. 不支持外键。
  4. 不支持全文索引,对分区表的分区键创建索引,那么这个索引也将被分区。
  5. 按日期进行分区很合适,因为很多日期函数可以用。但是对字符串来说合适的分区函数不太多。
  6. 只有RANGE和LIST分区能进行子分区,HASH和KEY分区不能进行子分区。
  7. 临时表不能被分区。
  8. 分区表对于单条记录的查询没有优势。
  9. 要注意选择分区的成本,没插入一行数据都需要按照表达式筛选插入的分区。
  10. 分区字段尽量不要可以为null

APP乱象横生,安全上网需做好哪些防范?国产手机有妙招相信大家在使用手机时,都被一些流氓APP这样套路过,比如说弹窗广告怎么点也点不掉突然莫名其妙地跳出来一些外部链接等。对于年轻人来说,这些套路有时尚且招架不及,那对于缺乏安全意识的老双11开门红购机攻略轻薄笔记本不用挑,看准这款不会错一年一度的双十一购物狂欢节就要来了,并且比往年来得还要更早一些,10月31日晚8点11月1日凌晨,各大电商的开门红活动都会正式开启。众所周知,由于这类节日通常会有较大的优惠,所以有突围主演用的手机火了,设计过于超前,放到现在也不过时相信大家都不陌生这部国民电视剧人民的名义,当初刚开播时可谓吸引观众无数,男女老少几乎都是它的观众群体。甚至直到现在,这部电视剧还在影响着我们,大家在生活中仍旧会时不时会用到剧中的一地摊上人民币10元一张随便挑1962年普通一角钱翻了100倍生活水平的提高,喜欢收集的人越来越多,在收集的物品上都有自己不同的喜好。比如纸币,就是很多人喜欢收藏的一个品类。无论是哪里的古玩市场上,都会有旧币的摊位,而且生意都不错。这个小摊上雾霾中的灞桥生态湿地公园落日时分有种朦胧美空气优良会更美灞桥生态湿地公园,位于西安市灞河城市段中游,北起东城大道华清桥,南至蓝田县界,毗邻西安世博园。灞桥生态湿地公园以灞桥灞柳灞水为主题文化,使灞河的历史文化和乡土风情得以复苏和发扬。成西安兴庆公园湖面很多死鱼有人说是公园游船为了经营破冰所致西安东门外的兴庆公园是很多市民休闲散步的好去处,但最近几天去兴庆公园却发现了一个奇怪的现象,平静的湖面上漂浮着许多死鱼。刚下过大雪的西安,温度很低,积雪还未完全消融,兴庆公园的湖面陕西水陆庵有第二敦煌美誉祈福硬币砸伤弥勒佛肚脐水陆庵位于陕西省西安市蓝田县,以保存古代精巧罕见的彩塑而闻名,是我国古代雕塑艺术的宝库,被誉为中国的第二个敦煌,是全国文物保护单位。很多游客,慕名来到水陆庵参观古建筑彩塑群的同时,内容电商的运营策略平台越来越成为一种必然选择,今天对品牌商或者创业者来说,技术成本的高昂的,而选择第三方平台已经成为一种必然的选择。流量红利时代的终结,反馈在供应端与需求端是两种截然不同的情况1供应越来越贵的互联网从web端到移动端,互联网正在逐步改变我们的生活,尤其是在中国,或许在人类历史上也难找到类似的案例,一项新技术革命完全普及我们生活的方方面面,深度影响与改善我们的吃住行,这一场革命未来还有广告吗?写这个话题,是因为最近一段时间比较热的三个话题1某平台头部MCN机构的刷量时间2广告市场的份额急剧下滑3百雀羚和李佳琦的纷争。如果独立看,是两个独立的事件,但如果放在一个大环境中,如何撰写好一份商业计划书(附目录结构)之前写过类似的问答和一篇文章,链接如下一份内容领域的商业计划书(可以直接使用)这里需要强调的是,融资计划书和商业计划书既有不同,也有类似的部分。所以两者还是有些区别的融资计划书这个
从5399元跌至1845元,2K曲面屏40W,顶级防水鸿蒙旗舰售价亲民开年之后不少手机厂商都发布了新机,但是购买了新机的用户相对于整个的手机用户群体而言并不多,虽然手机厂商们在频繁的发布新机,但是绝大多数普通消费者并不急着换机,他们购买一款手机之后会技嘉RTX3050显卡售价上涨近80约3527元据外媒videocardz报道,立陶宛零售商Kilobaitas是首批在推出之前正式上市GeForceRTX3050显卡的公司之一。技嘉的RTX3050游戏超频机型配备GA1061在线音乐市场不平静,后版权时代腾讯音乐出路在哪儿中国商报(记者祖爽)在线音乐市场不平静。近日有消息称,QQ音乐已在内测看广告免费听歌模式,用户仅需观看15秒广告,就可以免费听歌30分钟,包括原先仅对会员开放的歌曲。此举引来一些争小米12Ultra或改名为MIX5Pro,你期待吗?小米已在去年年底推出了小米12小米12Pro小米12X三款机型,但作为超大杯旗舰的小米12Ultra却缺席,近日有消息称,作为超大杯旗舰的小米12Ultra或改名为小米MIX5Pr未开放第三方支付方式苹果遭荷兰监管机构罚款565万美元中新经纬1月25日电当地时间周一,荷兰反垄断监管机构对苹果公司处以500万欧元(565万美元)的罚款,原因是该公司未向约会应用提供商开放其他支付方式。苹果1月15日曾表示,它已遵守在代码可维护性上不断加码自己做产品以后,我最看重的就是项目代码的可维护性。因为产品是我的核心,那自然不能像做一个项目那种,做完就完了,而是要一直维护升级,甚至定制开发,之后还可能将定制开发的有益部分回归到全球在线音乐市场排名出炉腾讯QQ音乐第4名,网易云第6名根据MiDiA音乐用户市场份额报告,2021年整体音乐市场继续保持强劲增长,2021年全球整体音乐市场用户为5。239亿,比2020年增长1。095亿,增长率达到了26。4。音乐平C详解类成员指针数据成员指针和成员函数指针及应用场合对于类对象对于成员的调用,需要有类对象的限定,一方面是一个类命名空间,另一方面用于传递隐含的this指针。数据和函数,包括类对象的数据成员和成员函数,都是可以寻址的,自然也可以定义汽车芯片,缺芯既是危,又是机1月21日,交通部公开发布绿色交通十四五发展规划。规划提出,以2020年为基准,到2025年,营运车辆单位运输周转量二氧化碳排放要下降5,营运船舶单位运输周转量二氧化碳要下降3。512GB256GB4800mAh,价格仅2299元!荣耀新机太良心脱离了华为之后的荣耀手机重整旗鼓,不但在中端市场和旗舰市场发力,还在折叠屏领域不断探索。华为相机和产品部门的人员也都迁徙到了荣耀品牌,所以荣耀称得上是新华为。无论是在硬件上还是软件美团代运营的服务项目一般有哪些?其实三七互联美团代运营是代运营行业的一个特例。为什么这么说呢?因为三七互联公司只专注医疗(口腔体检中心月子中心)丽人(美容院皮肤管理中心祛痘)这两个行业,却不涉足需求量最大的外卖行