MySQL之KEY分区和LINEAR KEY分区
上一篇: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分区相关推荐
- mysql 分区 key 写法_mysql数据库KEY分区用法
mysql数据库KEY分区用法 按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用户定义的表达式,而KEY分区的 哈希函数是由MySQL 服务器提供.MySQL 簇(Cluster)使 ...
- mysql实验总结存在问题_mysql表分区实验总结
草稿丢失,发表得不完整,稍后重新整理 mysql表分区技术能有效解决水平拆分和垂直拆分的不足,可操作性和效率都更优.以下是一些实验总结. InnoDB引擎需先在配置文件中设置: innodb_file ...
- maxvalue mysql自动分区_mysql的partition分区
前言:当一个表里面存储的数据特别多的时候,比如单个.myd数据都已经达到10G了的话,必然导致读取的效率很低,这个时候我们可以采用把数据分到几张表里面来解决问题. 方式一:通过业务逻辑根据数据的大小通 ...
- mysql partition 语法,MySQL与瀚高数据库的范围分区的语法及实例(APP)
目录 环境 文档用途 详细信息 环境 系统平台:Microsoft Windows (64-bit) 10 版本:5.6.4 文档用途 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就 ...
- mysql如何进行分区_mysql如何进行分区_mysql分区有哪些方法
MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP. 在这些语言中,MySQL 在 PHP 的 web 开发中是应用最广泛.大家知道mysql如何分区的吗?下面由学习 ...
- mysql横向分区_MySQL 横向表分区之RANGE分区小结
MySQL 横向表分区之RANGE分区小结 by:授客 QQ:1033553122 目录 简介 mysql表分区--RANGE分区,属于横向分区.举例说,假如有100条数据,分成十份,前10条数据放到 ...
- mysql的hash分区_MySQL中的分区(五)HASH分区
HASH分区主要用来分散热点读,取保数据在预先确定个数的分区中尽可能的平均分布.对一个表执行HASH分区时,MySQL会对分区键应用一个散列函数,一次确定数据应该放在哪一个分区中. MySQL分区支持 ...
- mysql 分区 全局索引_全局分区索引与局部分区索引
分区索引 分区索引,有是全局分区索引与局部分区索引,加上一种全局非分区索引(也就是普通索引),加起来共三种.下面我们讨论了这三种索引的组织结构以及应用场景. 1.全局非分区索引可以依赖普通的表,也可以 ...
- mysql表多大的时候需要分区_数据库分区表 什么情况下需要分区
什么数据库需要进行分区?首先看一下我们的案例:2010年6月我们六期IT开发团队接到一个XX全国连锁店的餐饮系统,经过一周的敏捷开发之后,XX餐饮系统正式上线了,由于该软件的功能强大,操作简单,功能灵 ...
最新文章
- 给老婆写个Python教程
- plotly基于dataframe数据绘制股票K线图并过滤非交易时间
- php开发问题及解决方案,PHP开源开发框架ZendFramework使用中常见问题说明及解决方案...
- 30 个 OpenStack 经典面试问题和解答
- [Hei.Captcha] Asp.Net Core 跨平台验证码实现
- 飞鸽传书2012是否发布了?
- html怎样获取用户手机号码,小程序如何获取用户手机号?
- HibernateUtil类(可用于连接多个数据库)
- 突然想起今天的博客汇报没写
- 黑马程序员 re模块的高级用法 学习笔记
- SQL Server 2012 安装教程
- H5 调用摄像头进行拍照
- FastStone Capture 下载
- YYText学习之根据range设置text的颜色和边框
- 使用用AI制作logo图标教程
- 20155201李卓雯 20155212江振思 20155313杨瀚《信息安全技术》 实验三 数字证书应用...
- PHP的zend引擎
- 视频火焰烟雾光线闪电科技粒子破碎特效PR标题模板
- java开发的游戏测试_用java编写。模拟一个简单的测试打字速度的游戏
- 可视化图形界面编程(Easyx联合c++的通讯录系统)
热门文章
- 危楼还望,叹此意、今古几人曾会? — 夜读南宋词人陈亮《念奴娇·登多景楼》感怀
- PLC输入信号接线方法
- 数学建模学习(60):matlab回归分析及残差图绘制
- 计算机 屏幕卡住,电脑屏幕卡住不动鼠标也动不了怎么办
- 中南大学计算机网,中南大学计算机网络习题2014
- 通达信行情接口的dll文档
- matlab的数字滤波器,基于Matlab的IIR数字滤波器设计方法比较及应用
- java期末大作业设计_java程序设计-期末大作业报告模板.doc
- 读书笔记 // 《精益数据分析》
- 【雷达与对抗】【2012.12】基于脉冲多普勒雷达的行走检测