上一篇:MySQL之HASH分区和LINEAR HASH分区初识

KEY分区

KEY分区与HASH分区相似,当然有不同点

(1)在HASH分区中,可以使用整数列或者基于列值的表达式,即PARTITION BY HASH(expr),而在KEY分区中,直接基于列,PARTITION BY KEY(column_list),column_list是列名列表,这有点像LIST分区和LIST COLUMNS分区,一个基于列值或者列值表达式,另一个直接基于列值或者列值列表;

(2)在HASH分区中,使用表达式expr对分区数num求模MOD(expr,num)来计算数据行的分区号,而在KEY分区中,使用MySQL服务器的哈希函数,NDB集群使用MD5(),对于使用其他存储引擎的表,服务器使用自己的内部哈希函数,该函数基于与PASSWORD()相同的算法;

(2)KEY分区可以接收0个或者多个列,即PARTITION BY KEY()或者PARTITION BY KEY(column_list);

基于INT类型字段,创建KEY分区:

CREATE TABLE k1 (id INT,name VARCHAR(20)
)
PARTITION BY KEY(id)
PARTITIONS 2;

基于VARCHAR类型,创建KEY分区:

CREATE TABLE k1 (id INT,name VARCHAR(20)
)
PARTITION BY KEY(name)
PARTITIONS 2;

基于多个列创建分区:

CREATE TABLE k1 (id INT ,name VARCHAR(20)
)
PARTITION BY KEY(id,name)
PARTITIONS 2;

(3)如果表有主键,用作分区键的任何列必须是表的主键,如果没有指定列名作为分区键,则使用表的主键(如果有主键),例如

CREATE TABLE k1 (id INT NOT NULL PRIMARY KEY,name VARCHAR(20)
)
PARTITION BY KEY()
PARTITIONS 2;

KEY()中并没有指定具体的列,则使用主键id作为分区键。等价于

CREATE TABLE k1 (id INT NOT NULL PRIMARY KEY,name VARCHAR(20)
)
PARTITION BY KEY(id)
PARTITIONS 2;

如下方式创建KEY分区会报错:

CREATE TABLE k1 (id INT NOT NULL PRIMARY KEY,name VARCHAR(20)
)
PARTITION BY KEY(name)
PARTITIONS 2;

如图:

(4)如果没有主键,但是有一个唯一键,那么分区键的任何列都必须是唯一键的一部分。例如:

CREATE TABLE k1 (id INT NOT NULL,name VARCHAR(20),UNIQUE KEY (id)
)
PARTITION BY KEY()
PARTITIONS 2;

k1中没有主键,但是定义了唯一键id,使用唯一键作为分区键。

如果唯一键没有定义为NOT NULL,会报错,如下:

如下三种方式都可以创建KEY分区表:

CREATE TABLE k1 (id INT NOT NULL,name VARCHAR(20),UNIQUE KEY (id,name)
)
PARTITION BY KEY(id)
PARTITIONS 2;
CREATE TABLE k1 (id INT NOT NULL,name VARCHAR(20),UNIQUE KEY (id,name)
)
PARTITION BY KEY(name)
PARTITIONS 2;
CREATE TABLE k1 (id INT NOT NULL,name VARCHAR(20),UNIQUE KEY (id,name)
)
PARTITION BY KEY(id,name)
PARTITIONS 2;

但是如下方式创建分区表还会报错:

CREATE TABLE k1 (id INT NOT NULL,name VARCHAR(20),UNIQUE KEY (id,name)
)
PARTITION BY KEY()
PARTITIONS 2;

原因是KEY()中并未指定列。

注:向KEY分区表中插入数据,数据存储到哪个分区并不一定使用的是像HASH分区中的求模运算。

LINEAR KEY分区

与LINEAR HASH分区类似,LINEAR KEY分区使用的也是二次幂(powers-of-two)算法,分区创建语法如下:

CREATE TABLE tk (col1 INT NOT NULL,col2 CHAR(5),col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;

下一篇:MySQL分区如何处理NULL?

MySQL之KEY分区和LINEAR KEY分区相关推荐

  1. mysql 分区 key 写法_mysql数据库KEY分区用法

    mysql数据库KEY分区用法 按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用户定义的表达式,而KEY分区的 哈希函数是由MySQL 服务器提供.MySQL 簇(Cluster)使 ...

  2. mysql实验总结存在问题_mysql表分区实验总结

    草稿丢失,发表得不完整,稍后重新整理 mysql表分区技术能有效解决水平拆分和垂直拆分的不足,可操作性和效率都更优.以下是一些实验总结. InnoDB引擎需先在配置文件中设置: innodb_file ...

  3. maxvalue mysql自动分区_mysql的partition分区

    前言:当一个表里面存储的数据特别多的时候,比如单个.myd数据都已经达到10G了的话,必然导致读取的效率很低,这个时候我们可以采用把数据分到几张表里面来解决问题. 方式一:通过业务逻辑根据数据的大小通 ...

  4. mysql partition 语法,MySQL与瀚高数据库的范围分区的语法及实例(APP)

    目录 环境 文档用途 详细信息 环境 系统平台:Microsoft Windows (64-bit) 10 版本:5.6.4 文档用途 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就 ...

  5. mysql如何进行分区_mysql如何进行分区_mysql分区有哪些方法

    MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP. 在这些语言中,MySQL 在 PHP 的 web 开发中是应用最广泛.大家知道mysql如何分区的吗?下面由学习 ...

  6. mysql横向分区_MySQL 横向表分区之RANGE分区小结

    MySQL 横向表分区之RANGE分区小结 by:授客 QQ:1033553122 目录 简介 mysql表分区--RANGE分区,属于横向分区.举例说,假如有100条数据,分成十份,前10条数据放到 ...

  7. mysql的hash分区_MySQL中的分区(五)HASH分区

    HASH分区主要用来分散热点读,取保数据在预先确定个数的分区中尽可能的平均分布.对一个表执行HASH分区时,MySQL会对分区键应用一个散列函数,一次确定数据应该放在哪一个分区中. MySQL分区支持 ...

  8. mysql 分区 全局索引_全局分区索引与局部分区索引

    分区索引 分区索引,有是全局分区索引与局部分区索引,加上一种全局非分区索引(也就是普通索引),加起来共三种.下面我们讨论了这三种索引的组织结构以及应用场景. 1.全局非分区索引可以依赖普通的表,也可以 ...

  9. mysql表多大的时候需要分区_数据库分区表 什么情况下需要分区

    什么数据库需要进行分区?首先看一下我们的案例:2010年6月我们六期IT开发团队接到一个XX全国连锁店的餐饮系统,经过一周的敏捷开发之后,XX餐饮系统正式上线了,由于该软件的功能强大,操作简单,功能灵 ...

最新文章

  1. 给老婆写个Python教程
  2. plotly基于dataframe数据绘制股票K线图并过滤非交易时间
  3. php开发问题及解决方案,PHP开源开发框架ZendFramework使用中常见问题说明及解决方案...
  4. 30 个 OpenStack 经典面试问题和解答
  5. [Hei.Captcha] Asp.Net Core 跨平台验证码实现
  6. 飞鸽传书2012是否发布了?
  7. html怎样获取用户手机号码,小程序如何获取用户手机号?
  8. HibernateUtil类(可用于连接多个数据库)
  9. 突然想起今天的博客汇报没写
  10. 黑马程序员 re模块的高级用法 学习笔记
  11. SQL Server 2012 安装教程
  12. H5 调用摄像头进行拍照
  13. FastStone Capture 下载
  14. YYText学习之根据range设置text的颜色和边框
  15. 使用用AI制作logo图标教程
  16. 20155201李卓雯 20155212江振思 20155313杨瀚《信息安全技术》 实验三 数字证书应用...
  17. PHP的zend引擎
  18. 视频火焰烟雾光线闪电科技粒子破碎特效PR标题模板
  19. java开发的游戏测试_用java编写。模拟一个简单的测试打字速度的游戏
  20. 可视化图形界面编程(Easyx联合c++的通讯录系统)

热门文章

  1. 危楼还望,叹此意、今古几人曾会? — 夜读南宋词人陈亮《念奴娇·登多景楼》感怀
  2. PLC输入信号接线方法
  3. 数学建模学习(60):matlab回归分析及残差图绘制
  4. 计算机 屏幕卡住,电脑屏幕卡住不动鼠标也动不了怎么办
  5. 中南大学计算机网,中南大学计算机网络习题2014
  6. 通达信行情接口的dll文档
  7. matlab的数字滤波器,基于Matlab的IIR数字滤波器设计方法比较及应用
  8. java期末大作业设计_java程序设计-期末大作业报告模板.doc
  9. 读书笔记 // 《精益数据分析》
  10. 【雷达与对抗】【2012.12】基于脉冲多普勒雷达的行走检测