hash分区的目的是将数据按照某列进行hash计算后更加均匀的分散到各个分区,相比,range和list分区来说,hash分区不需要明确指定一个给定的列值或者列值集合

应该在保存在哪个分区,mysql会自动按照hash计算后完成这些工作,我们只需要基于将要进行hash的列值指定一个列或者表达式,以及可选的指定要分区的表总的分区数量。

下面我们举一个例子来说,hash分区如何创建。首先我们创建如下的表格:hash_partition_tbl,并插入几条记录到表中,如下所示:

我们也同时看一下,对应的表空间文件是如何分布的(注意,我们已经设置了innodb_file_per_table=1,即每个表单独一个ibd文件),我们在对应的datadir目录下可以看到:

由于我们是分成4个hash区,因此可以看到四个表空间文件,分别是hash_partition_tab#p#pi.ibd,i=0,1,2,3。

这里的hash分区的确定按照如下规则:

mod(YEAR(‘2012-05-01’),4) = mod (2012,4) = 0, 在分区p0;

mod(YEAR(‘2016-05-01’),4) = mod (2016,4) = 0, 在分区p0;

mod(YEAR(‘2010-05-01’),4) = mod (2010,4) = 2, 在分区p2;

mod(YEAR(‘2011-05-01’),4) = mod (2011,4) = 3, 在分区p3;

因此,我们认为 p0有2个记录,p2和p3分别有1个记录,p1记录数为0,那么接下来我们通过查询information_schema.PARTITIONS表来验证。

之前我们知道range和list分区,如果表中存在primary key或者unique key,则对应分区的列必须是这些key的子集,那么对hash是否有同样的约束呢,字符类型的列是否可以作为hash分区?接下来我们立刻以实验为基础进行验证。

首先把之前的分区先删除掉,执行如下命令:

发现drop partition命令只能用在RANGE和LIST分区中。

现在我们把a设置为unique key,如果成功,则说明hash分区允许非unique key 作为hash的列,执行如下:

说明:如果将要分区的表有一个唯一的键,那么用来作为HASH用户函数的自变数或者主键的column_list的自变数的任意列都必须是那个键的一部分。

下面试一下,字符串列是否可以作为hash分区的列,按照上面的讨论和说明,我们认为是不行的,因为hash的计算本质是mod运算,必须是整数。实验如下:

实验证明:hash的分区必须是整数列。

可以通过下面的命令,进行重新分区:

alter table hash_partition_tbl partition by hash(a) partitions 4;

mysql hash分区 子分区_mysql分区管理 - hash分区相关推荐

  1. mysql range代表什么意思_MySQL数据表range分区例子

    某些行业数据量的增长速度极快,随着数据库中数据量的急速膨胀,数据库的插入和查询效率越来越低.此时,除了程序代码和查询语句外,还得在数据库的结构上做点更改:在一个主读辅写的数据库中,当数据表数据超过10 ...

  2. linux 主分区转换 lvm,Linux磁盘管理,分区,格式化,lvm

    df命令磁盘分区空间 du命令查看文件大小 磁盘分区 磁盘格式化 磁盘挂载mount 手动增加swap空间 lvm讲解 一.df命令磁盘分区空间 使用df可以查看文件系统的使用情况(即磁盘分区空间), ...

  3. linux逻辑分区最小值,linux 逻辑卷管理 调整分区大小

    [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 50 ...

  4. mysql code name作为字段_MySQL索引管理及执行计划

    一.索引介绍 1.什么是索引  1)索引就好比一本书的目录,它能让你更快的找到自己想要的内容. 2)让获取的数据更有目的性,从而提高数据库检索数据的性能. 2.索引类型介绍 1)BTREE:B+树索 ...

  5. mysql 单表 子查询_MySQL基本SQL语句之单表查询、多表查询和子查询 | 旺旺知识库...

    一.简单查询: 基本语法: SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * F ...

  6. mysql不支持子查询_MySQL不支持子查询优化一例

    一创建表 create table tt1(id int primary key, c1 INT);create table tt2(id int primary key, c2 INT);inser ...

  7. mysql连接代替子查询_MySQL优化之使用连接(join)代替子查询

    使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询.这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询 ...

  8. mysql limit 后子查询_mysql 关于limit 子查询和获取某当天所有记录

    今天写MYSQL 当有个需求用到limit 在子查询下使用.郁闷了竟然过不去.但只要转化就就可以.真是悲剧. update tbl set isoption=1 where  userguid='ss ...

  9. mysql的where子查询_mysql子查询

    原标题:mysql子查询 一.mysql子查询基本知识 子查询就是在原有的查询语句中,嵌入新的查询,来得到我们想要的结果集. 子查询一般分为:where型子查询.from型子查询和exists型子查询 ...

  10. mysql limit 后子查询_Mysql子查询用limit

    执行带有Limit子查询是有问题的: SELECT * FROM task_and_device WHERE job_id IN (SELECT id FROM wx_device_task_job ...

最新文章

  1. [AVR]使用AVR单片机驱动舵机
  2. meteor从入门到精通_我已经大规模运行Meteor一年了。 这就是我所学到的。
  3. 理解单片机系统—汇编语言
  4. 家的味道,家的感觉!!!
  5. 配合OAuth2进行单设备登录拦截
  6. MIPS汇编实现冒泡排序法
  7. 大众考虑投资中国汽车零部件供应商 潜在目标包括国轩高科
  8. 2020 年的第一天,程序员鸭血粉丝又碰上生产事故
  9. 绩效考核及评估活动的实施步骤及疑难问题汇编
  10. python实现电脑自动开机_python自动循环定时开关机(非重启)测试
  11. HL-1208机器清零方法
  12. 大数据在人力资源管理当中的应用
  13. Tasker Android系统增强神器,Android系统增强神器 Tasker
  14. C语言程序找零问题怎么运行,C语言找零问题
  15. 机器学习相关问题与资源下载。
  16. latex如何更改某一段落的字体_LaTeX 设置字体
  17. 全国计算机等级考试与软考的区别,如何区分计算机等级考试和软考两者有何区别...
  18. python用stomp扩展连接activemq(千千万万要注意,默认端口是61613,不是62613)
  19. ora2pg 导出Oracle数据
  20. 用于图像识别的神经网络,以及5大应用场景

热门文章

  1. 【物理应用】基于matlab非序贯蒙特卡洛法评估风电系统【含matlab源码 766期】
  2. 自我监督学习和无监督学习_弱和自我监督的学习-第3部分
  3. php搜索功能代码实列,php记录搜索引擎关键词的代码示例
  4. C++赋值运算符重载函数(operator=)
  5. php框架tp3.2.3和js写的微信分享功能心得,分享的标题内容图片自定义
  6. cblas_sgemm cblas.h
  7. POJ3253-Fence Repair
  8. 内网使用 IPV6 之 TunnelBroker隧道(6in4)篇
  9. IIS 7 配置备份和还原
  10. 静态属性和静态方法 - C++快速入门21